CVE-2026-43276该漏洞是Linux内核MANA网络驱动程序中的一个释放后重用(UAF)及双重释放漏洞。在特定的测试场景下,当服务重新扫描PCI路径时,`mana_serv_reset`函数调用`mana_gd_suspend`并执行`mana_gd_cleanup`销毁工作队列。若随后的`mana_gd_resume`函数因超时或协议错误而失败,代码将流转至`mana_serv_rescan`,进而触发PCI设备的移除流程。此过程会再次调用`mana_gd_cleanup`,导致尝试释放已经被销毁的工作队列,从而引发内核崩溃。该漏洞需要本地低权限触发,可导致系统拒绝服务,严重影响系统的机密性、完整性和可用性。
漏洞的核心在于`mana_gd_cleanup`函数中缺乏对`gc->service_wq`指针的有效性检查。在正常的驱动重置流程中,`mana_serv_reset`会暂停设备并清理资源。然而,当恢复阶段出现异常(返回`-ETIMEDOUT`或`-EPROTO`)时,错误处理路径直接调用了`mana_serv_rescan`。该函数通过`pci_stop_and_remove_bus_device`移除设备,这会触发驱动的`.remove`回调函数`mana_gd_remove`。由于`mana_gd_remove`内部再次调用了`mana_gd_cleanup`,而此时`gc->service_wq`指向的内存已被前一次清理释放,且指针未被置空,导致了双重释放。调用栈显示,崩溃发生在`kthread`执行工作队列任务时,通过`mana_do_service`最终到达`mana_gd_cleanup`。攻击者通过触发特定的硬件错误状态,可诱导系统进入这一错误路径,造成系统崩溃或潜在的权限提升(虽然当前主要表现为DoS)。