CVE-2026-89494
nicheHeap out-of-bounds write in Linux kernel ocfs2 DLM lock migration handler
The Linux kernel's ocfs2 distributed lock manager fails to validate the peer-supplied dlm_migratable_lockres structure when handling a DLM_MIG_LOCKRES message during lock-resource migration. A malicious node in an OCFS2 cluster domain can send a message with an oversized lockname_len or num_locks, causing dlm_init_lockres() to copy up to attacker-chosen lengths into a fixed 32-byte slab object (a heap out-of-bounds write with potential for kernel memory corruption or code execution), and dlm_process_recovery_data() to read past the allocated message copy (triggering a BUG_ON kernel panic). Exploitation requires the attacker to be a node in the cluster domain or able to inject traffic into the cluster's lock-management network, and it affects any Linux system using the ocfs2 clustered filesystem with the unpatched kernel. There is no public proof of concept and no indication of exploitation in the wild. Conforming recovery and migration messages continue to work after the fix, which validates lockname_len, num_locks, and the payload size immediately after dlm_grab().
What to do: Apply a kernel update containing the ocfs2 DLM validation fix as soon as your distribution ships it. If patching is delayed, restrict cluster lock-management and heartbeat traffic so only trusted cluster nodes can reach it (firewall the DLM communication ports from non-cluster hosts), and verify that unneeded systems are not running ocfs2 at all. Check whether the ocfs2/dlm modules are loaded or the filesystem is mounted on internet-reachable or multi-tenant hosts.
| Linux kernel (ocfs2/dlm cluster stack) | — |
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: ocfs2: validate lengths in dlm_mig_lockres_handler A node receiving a DLM_MIG_LOCKRES message trusts several fields of the peer-supplied dlm_migratable_lockres without validation. num_locks and lockname_len are bounded only on the sending side, and the message is never checked to actually carry num_locks migratable_lock entries. As a result dlm_process_recovery_data() walks mres->ml[0..num_locks) past the kmalloc(data_len) copy of the message (an out-of-bounds read that ends in a BUG_ON panic), and dlm_init_lockres() copies lockname_len bytes into the fixed 32-byte o2dlm_lockname slab object (a heap out-of-bounds write). Both are reachable by any node in the domain. Validate these fields right after dlm_grab(), before anything uses them -- including the not-joined error path, which already prints mres->lockname with the unbounded lockname_len as a %.*s precision. Reject the message unless lockname_len <= DLM_LOCKID_NAME_MAX, num_locks <= DLM_MAX_MIGRATABLE_LOCKS (the bound the sender already asserts), and the payload is large enough to hold the claimed locks. Conforming recovery and migration messages are unaffected.
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.