CVE-2025-71081CVE-2025-71081是Linux内核中ASoC(ALSA System on Chip)stm32 SAI(Serial Audio Interface)驱动的一个资源管理漏洞。该漏洞发生在设备探针(probe)过程中,当驱动对sync provider的OF(Open Firmware)设备树节点获取引用后,未能在所有错误路径上正确释放该引用。具体而言,引用仅在set_sync()回调失败时才会被释放,但如果平台设备探针失败(如probe deferral延迟探针)或驱动解绑时,引用不会被正确释放,导致OF节点泄漏。长期累积可能导致内存泄漏,更危险的是,如果DAI(Digital Audio Interface)在未重新绑定平台驱动的情况下重新探针,可能触发use-after-free漏洞,攻击者可利用此漏洞进行本地权限提升或拒绝服务攻击。该漏洞需要本地访问,攻击复杂度低,但成功利用可造成高可用性影响。
该漏洞位于Linux内核的sound/soc/stm/stm32_sai.c文件中。在SAI驱动的probe函数中,代码通过of_parse_phandle()或类似函数获取sync provider的OF节点引用,并将引用计数增加。正常流程中,这个引用应该在驱动卸载或probe失败时通过of_node_put()释放。然而,当前实现仅在set_sync()回调失败时才释放引用,忽略了以下场景:1) platform_driver的probe函数返回错误(如probe deferral);2) driver被unbind时未清理;3) DAI重新probe时旧引用未释放。当这些情况发生时,OF节点的引用计数错误,导致节点无法被正确释放。在Linux设备模型中,OF节点在所有引用释放前不会被回收,因此会持续占用内存。如果后续代码尝试访问已被释放的节点对象,将触发use-after-free,可能导致内核崩溃或任意代码执行。修复方案是在所有可能的错误路径和卸载路径上添加of_node_put()调用,确保引用计数平衡。