CVE-2026-43295Linux内核的Rapidio子系统中发现一处内存管理漏洞,该漏洞源于`rio_scan_alloc_net`函数中的错误处理逻辑。当`idtab`分配失败时,由于`net`对象尚未被注册,系统错误地使用了`rio_free_net`而非简单的`kfree`进行内存释放,同时未将`mport->net`置空,导致产生悬空指针风险。此漏洞CVSS评分5.5,属于中危等级,攻击者需具备本地低权限,虽不影响机密性和完整性,但可导致系统可用性受损。
该漏洞具体位于Linux内核drivers/rapidio/rio-scan.c文件的`rio_scan_alloc_net`函数中。漏洞成因是错误处理路径下的内存释放逻辑不当。在Rapidio网络设备初始化阶段,系统会调用`rio_scan_alloc_net`分配内存。若`idtab`(ID表)分配失败,函数将执行清理操作。此时,由于`rio_add_net`尚未被调用,`net`对象尚未完成注册。原代码逻辑可能错误地调用了`rio_free_net`,该函数包含复杂的清理逻辑,不适用于未初始化或半初始化的对象;正确的处理方式应仅调用`kfree(net)`释放基础内存。此外,补丁中强调了将`mport->net`置为NULL的重要性,这能有效避免产生悬空指针。攻击者利用此漏洞需具备本地访问权限,可通过恶意构造的IOCTL或特定硬件触发条件引发内核空指针解引用或释放后重用,从而导致系统崩溃或拒绝服务。