CVE-2026-43460Linux内核中的rockchip-sfc驱动程序存在一个双重释放漏洞。该驱动在移除回调函数中手动调用了`spi_unregister_controller()`,但由于在探测函数中使用了`devm_spi_register_controller()`进行注册,这会导致设备移除时自动触发注销操作。这种机制冲突造成了控制器被注销两次,从而引发双重释放错误。此漏洞可能被本地攻击者利用,导致系统崩溃、拒绝服务或潜在的权限提升。
该漏洞的根本原因在于资源管理机制的冲突。在Linux内核驱动开发中,`devm_spi_register_controller`函数利用设备资源管理机制,会在设备卸载时自动调用`spi_unregister_controller`来清理资源。然而,该驱动的`remove`函数中也显式调用了`spi_unregister_controller`。当设备被移除时,`devm`机制先触发自动注销,随后`remove`函数再次执行注销,导致同一个控制器对象被释放两次(Double Free)。这种内存破坏行为可能覆盖内核数据结构。此外,原代码中存在资源释放顺序问题,即DMA缓冲区可能在控制器注销前被取消映射。修复方案将探测函数中的注册方式改为非托管的`spi_register_controller`,从而精确控制资源释放的顺序,确保控制器在DMA缓冲区处理前被注销。本地低权限用户可通过触发设备卸载流程来利用此漏洞,引发内核崩溃或执行任意代码。