CVE-2026-23322Linux内核中的IPMI(智能平台管理接口)子系统中存在一个高危安全漏洞,该漏洞源于错误处理逻辑中的严重缺陷。当SMI发送者返回错误时,`smi_work()`函数在传递错误响应后会跳转至重启流程,但未能正确清理`intf->curr_msg`。这导致系统保留了指向旧消息的指针,使得`sender()`函数被再次调用时使用了同一消息。如果发送操作再次失败,系统会尝试将同一个`recv_msg`对象重复添加到用户消息列表中,从而引发列表损坏。这种损坏进一步导致内存释放后重用及空指针解引用,攻击者可利用该漏洞造成系统拒绝服务或潜在的权限提升。
该漏洞属于典型的释放后重用及链表损坏漏洞,其根本原因在于IPMI驱动程序在处理发送错误时的状态管理缺失。漏洞触发机制依赖于`smi_work()`函数的执行流程:首先,当底层SMI发送者操作失败时,代码应清理当前消息并重置状态。然而,受影响版本的代码在执行`goto restart`跳转时,未将`intf->curr_msg`置空,且未释放`newmsg`指针。这导致`sender()`函数被再次调用时,仍然处理之前已经失败的消息。若该消息再次导致发送失败,`deliver_err_response()`函数会被第二次调用,尝试将已经在链表中的`recv_msg`节点再次添加。这种“双重添加”操作破坏了内核链表结构,导致后续的内存管理操作出错。当相关内存被释放并被重新分配后,原代码若继续访问该内存(Use-After-Free),将导致内核崩溃或允许攻击者通过控制内存内容实现提权。