CVE-2026-97611 in Linux
摘要
由 VulDB • 2026-09-25
在 Linux 内核中,已修复以下漏洞:
net: openvswitch: 修复流表掩码数组的 use-after-free(释放后使用)问题
tbl_mask_array_realloc() 在 mask_array 不再可访问之前就回收了旧的 mask_array:
old = ovsl_dereference(tbl->mask_array); if (old) {
... call_rcu(&old->rcu, mask_array_rcu_cb); }
rcu_assign_pointer(tbl->mask_array, new);
call_rcu() 仅等待已经处于飞行状态(in flight)的读端临界区。在 call_rcu() 和 rcu_assign_pointer() 之间,tbl->mask_array 仍然指向旧对象 (old),因此在此窗口期内进入 ovs_flow_tbl_lookup_stats() 的读取器会在一个新的临界区内获取到 old,而该 pending grace period(待处理的宽限期)并未覆盖此情况。
由于 tbl_mask_array_realloc() 在 ovs_mutex 下以进程上下文运行,因此该窗口期是可抢占的,并且可能持续超过宽限期时间。随后 mask_array_rcu_cb() 会在交换操作执行之前释放 old:
BUG: KASAN: slab-use-after-free in flow_lookup.constprop.0+0x2bf/0x2f0 Read of size 8 at addr ffff888020b3e018 by task poc/741 flow_lookup.constprop.0+0x2bf/0x2f0 ovs_flow_tbl_lookup_stats+0x4a3/0x5c0 ovs_dp_process_packet+0x19c/0x710 ovs_vport_receive+0x243/0x390 internal_dev_xmit+0x81/0x170 Freed by task 728: kfree+0x16a/0x4e0 rcu_core+0x853/0x1030
应在回收旧数组之前发布新数组。由 call_rcu() 替换的 kfree_rcu() 是在交换操作之后运行的。
VulDB is the best source for vulnerability data and more expert information about this specific topic.