CVE-2026-31442Linux内核中的dmaengine子系统存在一个安全漏洞,具体涉及idxd驱动程序。该漏洞发生在设备进行功能级重置(FLR)的过程中。如果在第一次FLR成功完成后,第二次FLR无法为保存的配置分配临时存储区域,可能会导致无效的内存访问。此漏洞的根本原因在于对已释放内存区域的指针管理不当,导致产生悬空指针。通过在FLR完成后将已释放的临时存储区域指针设置为NULL,可以有效防止此类非法访问,从而修复该漏洞并提升系统稳定性。
该漏洞位于Linux内核的`dmaengine: idxd`驱动模块中,主要涉及设备功能级重置(FLR)期间的内存管理机制。当设备执行FLR时,驱动程序需要保存当前的配置状态,这通常通过分配一个临时的“scratch area”(暂存区)来实现。漏洞触发场景如下:首先,设备执行第一次FLR,此时配置被保存,暂存区被分配和使用。随后,如果需要进行第二次FLR,驱动程序会尝试再次分配暂存区。然而,如果第二次分配失败(例如内存不足),代码逻辑中可能未正确处理之前已释放的指针,或者保留了指向已释放内存的悬空指针。当代码后续尝试通过该指针访问内存时,就会触发无效内存访问,可能导致内核崩溃或潜在的权限提升。修复补丁的核心逻辑是在FLR完成后,立即将用于保存配置的暂存区指针显式设置为NULL。这一操作确保了即使后续分配失败,任何对该指针的引用都会安全地指向NULL,而不是野指针,从而避免了内核崩溃或数据损坏的风险。