CVE-2026-31475Linux内核中的ASoC sma1307音频驱动存在双重释放漏洞。该漏洞源于代码在处理分配失败时,错误地对使用devm_kzalloc分配的mode_set条目进行了手动kfree释放。由于devm_kzalloc分配的资源由设备资源管理机制自动释放,手动释放会导致同一块内存被释放两次,进而可能引发内核崩溃或本地权限提升等严重后果。
该漏洞发生在Linux内核ALSA SoC驱动的sma1307组件中。在之前的代码修改中,为了增强健壮性,开发者添加了对内存分配失败的检查和清理路径。然而,在sma1307_setting_loaded函数的错误处理逻辑中,开发人员误将mode_set条目视为普通内存进行管理。这些条目实际上是使用devm_kzalloc分配的,这意味着它们的生命周期由内核的devres子系统管理,会在设备卸载时自动释放。当分配失败触发错误路径时,代码调用了kfree手动释放这些内存。随后,当设备关闭或驱动卸载时,devres机制会再次尝试释放同一块内存,导致Double Free漏洞。攻击者若能触发该分配失败路径,可利用此漏洞破坏内核内存管理结构,可能导致拒绝服务或本地提权。