CVE-2026-89486
largeUse-After-Free in Linux Kernel IPMI Command Receiver Teardown
The Linux kernel's IPMI message handler contains a use-after-free in _ipmi_destroy_user(): commit 9e91f8a6c868 ("ipmi:msghandler: Remove srcu for the ipmi_interfaces list") dropped the synchronize_rcu() grace period between unlinking entries from intf->cmd_rcvrs and freeing them, even though that list is still read under plain RCU by find_cmd_rcvr() and handle_ipmb_get_msg_cmd(). If an IPMI user is destroyed while another CPU concurrently processes an incoming IPMB message, the reader can still hold a pointer to a cmd_rcvr that has been kfree()d, resulting in kernel memory corruption. A local attacker with low privileges who can win this race could escalate privileges to root or crash the system (CVSS 3.1: 7.8, AV:L/PR:L with high confidentiality, integrity, and availability impact). Affected systems are those running kernels that include the offending commit with the IPMI message handler active, which in practice means physical servers and similar managed hardware with BMC/IPMI support. No public proof of concept exists and the flaw is not in CISA's KEV catalog, so exploitation is not known to have occurred.
What to do: Update to a kernel containing the fix (it restores synchronize_rcu() in _ipmi_destroy_user()) as soon as your distribution ships it, and prioritize servers where untrusted local users or containers exist. Verify that /dev/ipmi* device nodes are restricted to root or a dedicated group so unprivileged users cannot open IPMI handles. Watch for kernel oopses or panics referencing ipmi_msghandler, handle_ipmb_get_msg_cmd(), or _ipmi_destroy_user(), which would signal attempted triggering of the race.
| Linux kernel (IPMI message handler, ipmi_msghandler) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: ipmi: Fix use-after-free of cmd_rcvr in _ipmi_destroy_user() Commit 9e91f8a6c868 ("ipmi:msghandler: Remove srcu for the ipmi_interfaces list") dropped the synchronize_rcu() between unlinking the command receivers from intf->cmd_rcvrs and freeing them, updating only the comment that explains why the barrier is needed. The cmd_rcvrs list is still traversed under plain RCU: find_cmd_rcvr() walks it inside rcu_read_lock(), and handle_ipmb_get_msg_cmd() borrows rcvr->user from that lookup within the same read-side section. Without the grace period, _ipmi_destroy_user() can kfree() a cmd_rcvr while a reader still holds a pointer to it, causing a use-after-free. The rework only made srcu unnecessary for the interfaces list; the cmd_rcvrs list still relies on plain RCU. Restore the synchronize_rcu() before freeing the receivers.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.