CVE-2026-90302 in Linux信息

摘要

由 VulDB • 2026-09-18

在 Linux 内核中,已修复以下漏洞:

ocfs2: 将心跳回调与 o2net 拆除过程同步

补丁系列“ocfs2: 硬化心跳拆除竞态条件”。

该系列解决了通过 KASAN 发现的两个 OCFS2 心跳/o2net 拆除竞态问题。

本补丁(共 2 个):

在 configfs local-node 拆除进入 o2net_stop_listening() 期间,心跳回调仍保持注册状态。节点下线事件可能仍在执行过程中经过 o2net_disconnect_node() 和 o2net_set_nn_state(),而此时拆除过程正在销毁 o2net_wq(工作队列),因此后续的 queue/flush 操作可能会命中一个已失效的工作队列。KASAN 在 __queue_work() 中捕获到了这一 slab-use-after-free(slab 释放后使用)错误,调用链如下:

KASAN slab-use-after-free in __queue_work+0x56/0xa90 Read of size 4 (读取大小为 4) Call trace: dump_stack_lvl+0x66/0xa0 print_report+0xce/0x630 __queue_work+0x56/0xa90 srso_alias_return_thunk+0x5/0xfbef5 __virt_addr_valid+0x19f/0x330 kasan_report+0xe0/0x110 __queue_delayed_work+0x58/0x1e0 queue_delayed_work_on+0xb4/0xc0 o2net_set_nn_state+0x467/0x840 o2net_disconnect_node+0x7b/0xe0 o2net_hb_node_down_cb+0x54/0x60 o2hb_run_event_list+0x236/0x2d0 o2hb_check_slot+0xad4/0xbc0 lock_release+0xc8/0x290 o2hb_check_slot+0x9ea/0xbc0 trace_hardirqs_on+0x18/0x130 o2hb_do_disk_heartbeat+0x646/0xb30 (fs/ocfs2/cluster/heartbeat.c:1079) __lock_acquire+0x466/0x2260 lockdep_hardirqs_on_prepare+0xea/0x1a0 ktime_get_with_offset+0xe9/0x230 o2hb_thread+0x14e/0x770 kthread+0x1ad/0x1f0 ret_from_fork+0x3c9/0x540 __switch_to+0x2e9/0x730 ret_from_fork_asm+0x1a/0x30

Allocated by task stack (由任务栈分配): kasan_save_stack+0x33/0x60 kasan_save_track+0x14/0x30 __kasan_kmalloc+0xaa/0xb0 __kmalloc_noprof+0x292/0x760 __alloc_workqueue+0x736/0xc60 alloc_workqueue_noprof+0xb1/0x110 o2net_start_listening+0xe5/0x430 o2nm_node_local_store+0x184/0x310 configfs_write_iter+0x18a/0x210 vfs_write+0x469/0x810 ksys_write+0xd2/0x170 do_syscall_64+0x115/0x6a0 (arch/x86/entry/syscall_64.c:87) entry_SYSCALL_64_after_hwframe+0x77/0x7f

Freed by task stack (由任务栈释放): kasan_save_stack+0x33/0x60 kasan_save_track+0x14/0x30 kasan_save_free_info+0x3b/0x60 __kasan_slab_free+0x5f/0x80 kfree+0x313/0x590 rcu_core+0x4f4/0x1320 handle_softirqs+0x156/0x660

queue_delayed_work_on o2net_set_nn_state o2net_disconnect_node o2net_hb_node_down_cb o2hb_run_event_list

保持心跳回调注册状态,以便法定人数(quorum)状态仍能跟踪节点状态,但一旦本地拆除开始,就停止让它们驱动 o2net 重连/断开连接的工作。在销毁 o2net_wq 之前将传输标记为离线,等待任何正在执行的心跳回调完成,并延迟启动回放过程,直到新的 local node 通过 o2nm_this_node() 发布为止。

回放过程还必须与心跳回调的分发保持序列化(串行化)。否则,可能会复制 live-node 快照,真实的 hb_down 回调可能为对等节点安装 -ENOTCONN 错误码,而陈旧的回放仍会为该对等节点调用 o2net_hb_node_up() 并排队重连工作,尽管心跳已经处于下线状态。

有缺陷的场景涉及两条路径,每列显示该路径内的顺序:

local-node teardown (本地节点拆除): heartbeat node-down callback (心跳节点下线回调): 1. configfs local-off enters 1. o2hb_run_event_list() 调用 o2net_stop_listening(). o2net_hb_node_down_cb()。 2. teardown heads for 2. 回调到达 destroy_workqueue(o2net_wq). o2net_disconnect_node() 和 o2net_set_nn_state()。 3. teardown destroys and NULLs 3. 回调通过 o2net_wq 刷新或排队 o2net_wq. work (工作项)。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

来源

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!