CVE-2026-31587该漏洞存在于Linux内核的ASoC(ALSA系统片上机)子系统中,具体涉及高通Q6APM音频处理模块。由于q6apm组件使用设备管理API注册动态数字音频接口(DAI),而组件本身也使用了托管资源API,导致在设备卸载或驱动解绑时,资源释放顺序出现错误。具体表现为DAI指针被释放后,组件仍持有并尝试访问该指针,从而引发释放后利用漏洞。该漏洞可能被本地攻击者利用,导致内核崩溃、权限提升或拒绝服务。
该漏洞的根源在于Linux内核音频驱动中资源生命周期管理的逻辑错误。在`q6apm`驱动中,组件通过`devm_`(设备管理)API进行注册,而从拓扑结构加载的动态DAI也使用`devm_kmalloc`进行分配。当底层APR设备被移除(例如通过服务崩溃或模拟器关闭)时,会触发`devres_release_all`释放所有托管资源。由于释放顺序的不确定性,动态DAI可能在组件的卸载回调函数`snd_soc_del_component_unlocked`执行之前就已经被释放。当组件尝试清理或访问这些DAI时,触发了KASAN检测到的`slab-use-after-free`错误。攻击者可以通过触发特定的设备移除序列(如通过PDR服务状态通知)来利用此竞争条件,导致内核空指针解引用或执行任意代码。修复方案是将组件注册改为非托管版本(`snd_soc_component_register`而非`devm_snd_soc_component_register`),确保组件在释放其引用的DAI之前不会被销毁。