{"id":25731,"date":"2026-09-18T04:31:48","date_gmt":"2026-09-17T20:31:48","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90322"},"modified":"2026-09-18T04:31:48","modified_gmt":"2026-09-17T20:31:48","slug":"cve-2026-90322","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90322","title":{"rendered":"CVE-2026-90322 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nocfs2\/cluster: keep h"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ocfs2\/cluster: keep heartbeat local node stable<\/p>\n<p>o2nm_node_local_store() handles local=0 by stopping o2net and setting<br \/>\ncl_local_node to O2NM_INVALID_NODE_NUM, but it leaves cl_has_local set.<br \/>\nThat stale state makes o2nm_this_node() return 255, blocks a later local=1<br \/>\nattempt with -EBUSY, and can feed 255 to heartbeat users that call<br \/>\no2nm_this_node() dynamically.<\/p>\n<p>Clearing cl_has_local is required when the local node is reset.  But<br \/>\nheartbeat threads can still be running at that point.  They pin the local<br \/>\nnode config item at startup, yet o2hb_do_disk_heartbeat() and thread<br \/>\nteardown re-read o2nm_this_node() for the local slot and for<br \/>\no2nm_undepend_this_node().  Once local=0 has cleared the live local-node<br \/>\nstate, those dynamic reads return O2NM_MAX_NODES, which is also the<br \/>\ninvalid node number 255.<\/p>\n<p>Store the local node number in the heartbeat region when the region<br \/>\nstarts.  Use that stable node for heartbeat slot writes\/checks,<br \/>\nnegotiation messages, and the final configfs undepend.  Stop the heartbeat<br \/>\nloop when the current local node no longer matches the stored node, and<br \/>\nclear cl_has_local together with cl_local_node in the local=0 path so<br \/>\nnodemanager state matches node removal.<\/p>\n<p>Validation reproduced this kernel report:<br \/>\nKASAN slab-out-of-bounds in o2hb_do_disk_heartbeat+0x372\/0xb30<br \/>\nRIP: 0010:memset+0xf\/0x20<br \/>\nRead of size 8<br \/>\nCall trace:<br \/>\n  dump_stack_lvl+0x66\/0xa0<br \/>\n  print_report+0xd0\/0x630<br \/>\n  o2hb_do_disk_heartbeat+0x372\/0xb30 (fs\/ocfs2\/cluster\/heartbeat.c:1079)<br \/>\n  srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n  __virt_addr_valid+0x188\/0x2f0<br \/>\n  kasan_report+0xe4\/0x120<br \/>\n  o2hb_do_disk_heartbeat+0x5\/0xb30 (fs\/ocfs2\/cluster\/heartbeat.c:1079)<br \/>\n  o2hb_thread+0x14e\/0x770<br \/>\n  kthread_affine_node+0x139\/0x180<br \/>\n  lockdep_hardirqs_on_prepare+0xda\/0x190<br \/>\n  trace_hardirqs_on+0x18\/0x130<br \/>\n  kthread+0x19d\/0x1e0<br \/>\n  ret_from_fork+0x37a\/0x4d0<br \/>\n  __switch_to+0x2d5\/0x6f0<br \/>\n  ret_from_fork_asm+0x1a\/0x30<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ocfs2\/cluster: keep heartbeat local node stable<\/p>\n<p>o2nm_node_local_store() handles local=0 by stopping o2net and setting<br \/>\ncl_local_nod<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25731","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25731","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}