CVE-2026-31399Linux内核中的nvdimm/bus模块存在一个释放后利用(Use After Free)漏洞。该漏洞发生在异步初始化函数`nd_async_device_register`中。当`device_add()`函数调用失败(例如分配内存失败)时,设备的引用计数会降至0,导致设备被释放。然而,代码随后仍尝试访问父设备指针以释放父设备引用,从而引发释放后利用问题。攻击者利用此漏洞可能导致本地权限提升或系统崩溃。
该漏洞的根源在于Linux内核libnvdimm子系统中异步设备注册逻辑的引用计数管理缺陷。在`nd_async_device_register`函数中,虽然引入了在异步初始化期间保持父设备引用的机制,但在处理`device_add()`失败路径时存在逻辑错误。具体而言,当执行`device_add()`时,如果内存分配失败,该函数内部会触发`put_device()`调用。由于此时设备的引用计数可能已经为0,设备对象会被立即释放。然而,函数返回后,后续代码试图通过已释放的设备对象访问其父设备指针(`dev->parent`)来执行`put_device(parent)`。这种对已释放内存的访问构成了释放后利用(UAF)。攻击者需要本地低权限即可触发该漏洞,通过诱导`device_add()`失败,进而控制已释放的内存或导致内核崩溃。