Cloudanix VulnDB

CVE-2026-90322

None

CVSS

—

EPSS

0.2%

Published

Sep 17, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in the Linux kernel code that manages clustered storage nodes can cause memory errors and crashes when nodes are added or removed.

Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
Moderate
Impact
Denial Of Service
Component
OS kernel
Class
Memory Corruption
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Improper clearing of cl_has_local when resetting the local node in o2nm_node_local_store leaves stale state, causing o2nm_this_node to return the invalid node number 255; heartbeat threads then read this value during slot operations and undepend calls, triggering slab-out-of-bounds access inside o2hb_do_disk_heartbeat.

Why it matters to the business

Systems using the OCFS2 clustered filesystem may experience kernel memory corruption or crashes during node reconfiguration or heartbeat activity, leading to unplanned downtime and potential data inconsistency on shared storage.

How an attack unfolds

An attacker with local access or the ability to trigger local node removal via configfs issues a local=0 operation, leaving inconsistent nodemanager state; subsequent heartbeat threads read the invalid node identifier and perform out-of-bounds memory operations, resulting in a kernel fault.

How to fix it

Apply the upstream kernel commit that stores the local node number at heartbeat region start and clears cl_has_local together with cl_local_node on local=0; rebuild and deploy the fixed kernel on all OCFS2 cluster nodes.

How to confirm the fix worked

Confirm the patch is present by inspecting fs/ocfs2/cluster/heartbeat.c and nodemanager.c for the stable-node storage logic and the joint cl_has_local/cl_local_node clear; re-run the reproduction sequence that previously triggered KASAN in o2hb_do_disk_heartbeat and verify it no longer occurs.

Typical attack path

  1. Obtain local access or ability to write to OCFS2 configfs
  2. Issue local=0 to trigger node removal path
  3. Allow heartbeat threads to continue and re-read o2nm_this_node
  4. Trigger o2hb_do_disk_heartbeat to dereference invalid node slot
  5. Cause slab-out-of-bounds memory operation

How to detect it

Inspect kernel logs for KASAN slab-out-of-bounds reports with a call trace containing o2hb_do_disk_heartbeat and o2hb_thread; also look for repeated o2nm_this_node returning 255 during cluster startup or teardown.

What your security team should do

  • Prioritize patching OCFS2 cluster nodes running affected kernels within normal maintenance windows
  • Monitor for kernel oops or KASAN reports referencing o2hb_do_disk_heartbeat
  • Restrict unprivileged access to OCFS2 configfs interfaces until patched

The record

In the Linux kernel, the following vulnerability has been resolved: ocfs2/cluster: keep heartbeat local node stable o2nm_node_local_store() handles local=0 by stopping o2net and setting cl_local_node to O2NM_INVALID_NODE_NUM, but it leaves cl_has_local set. That stale state makes o2nm_this_node() return 255, blocks a later local=1 attempt with -EBUSY, and can feed 255 to heartbeat users that call o2nm_this_node() dynamically. Clearing cl_has_local is required when the local node is reset. But heartbeat threads can still be running at that point. They pin the local node config item at startup, yet o2hb_do_disk_heartbeat() and thread teardown re-read o2nm_this_node() for the local slot and for o2nm_undepend_this_node(). Once local=0 has cleared the live local-node state, those dynamic reads return O2NM_MAX_NODES, which is also the invalid node number 255. Store the local node number in the heartbeat region when the region starts. Use that stable node for heartbeat slot writes/checks, negotiation messages, and the final configfs undepend. Stop the heartbeat loop when the current local node no longer matches the stored node, and clear cl_has_local together with cl_local_node in the local=0 path so nodemanager state matches node removal. Validation reproduced this kernel report: KASAN slab-out-of-bounds in o2hb_do_disk_heartbeat+0x372/0xb30 RIP: 0010:memset+0xf/0x20 Read of size 8 Call trace: dump_stack_lvl+0x66/0xa0 print_report+0xd0/0x630 o2hb_do_disk_heartbeat+0x372/0xb30 (fs/ocfs2/cluster/heartbeat.c:1079) srso_alias_return_thunk+0x5/0xfbef5 __virt_addr_valid+0x188/0x2f0 kasan_report+0xe4/0x120 o2hb_do_disk_heartbeat+0x5/0xb30 (fs/ocfs2/cluster/heartbeat.c:1079) o2hb_thread+0x14e/0x770 kthread_affine_node+0x139/0x180 lockdep_hardirqs_on_prepare+0xda/0x190 trace_hardirqs_on+0x18/0x130 kthread+0x19d/0x1e0 ret_from_fork+0x37a/0x4d0 __switch_to+0x2d5/0x6f0 ret_from_fork_asm+0x1a/0x30

Affected packages

Ecosystem Package Introduced Fixed