CVE-2025-40005CVE-2025-40005是Linux内核中spi-cadence-quadspi(Cadence四线SPI控制器)驱动存在的一个竞态条件漏洞。该漏洞源于驱动程序在处理间接读取(indirect read)和间接写入(indirect write)操作时,假设不会发生强制设备移除(unbind)操作,但实际上root超级用户仍然可以执行强制设备移除操作。当驱动程序正在进行间接读写操作时,如果用户强制解绑驱动,会导致内核崩溃。
该漏洞的根本原因是驱动程序缺少对附加到控制器的设备进行引用计数(refcount)管理的机制。在没有引用计数保护的情况下,驱动无法优雅地等待附加设备的移除操作完成后再继续执行移除流程,从而在并发操作中触发了对已释放资源的访问,造成内核崩溃。
该漏洞的CVSS评分为5.5,属于中危级别。攻击者需要具有本地低权限访问能力(PR:L),无需用户交互(UI:N),攻击向量为本地(AV:L),利用复杂度低(AC:L)。一旦成功利用,将导致系统可用性完全丧失(机密性影响低、完整性无影响、可用性影响高),表现为内核崩溃(kernel panic)或系统挂起。
该漏洞位于Linux内核的spi-cadence-quadspi驱动中,主要涉及驱动绑定/解绑(bind/unbind)与数据传输操作之间的竞态条件。
**漏洞原理:**
cadence-quadspi驱动支持间接读取和间接写入操作,这些操作通过DMA或内存映射方式与SPI设备进行数据交互。在原始实现中,驱动假设在数据传输操作进行期间不会发生强制设备移除操作,因此没有对控制器附加的设备实施引用计数保护。
当root用户执行强制解绑操作(如通过sysfs的'unbind'接口或echo操作)时,驱动的remove回调会被调用,同时可能还有正在进行的间接读写操作。这两个路径并发执行,导致:
1. remove回调释放了驱动相关的资源(包括DMA通道、内存映射等)
2. 同时进行的数据传输操作访问了已被释放的资源
3. 最终触发内核空指针解引用或use-after-free,导致内核崩溃
**利用方式:**
1. 攻击者需要本地root权限才能执行强制设备解绑操作
2. 利用流程包括:触发SPI间接读写操作(可通过访问挂载在该SPI控制器上的存储设备如NOR Flash),在操作进行期间同时执行设备解绑
3. 竞态窗口虽然较小,但可以通过循环触发来提高成功率
**修复方案:**
通过实现引用计数(refcount)机制来跟踪附加到控制器的设备数量。在remove操作中,优雅地等待所有附加设备的移除操作完成后再继续执行清理流程,确保数据传输操作和设备移除操作之间的同步。