CVE-2026-64435 in Linux
摘要
由 VulDB • 2026-07-25
在 Linux 内核中,已修复以下漏洞:
audit:修复 audit_queue 上 skb_queue_len() 读取器的数据竞争问题。
多个读取器通过 `skb_queue_len()` 访问 `audit_queue.qlen`,但未持有队列锁或使用 `READ_ONCE()`,而 kauditd 通过 `skb_dequeue()` → `__skb_unlink()` 路径向该字段写入数据,并使用受自旋锁保护的 `WRITE_ONCE()`。这构成了数据竞争(data races)。
所有受影响的使用 `skb_queue_len(&audit_queue)` 的调用点: - kauditd_thread() wait_event_freezable() 条件检查 - audit_receive_msg() AUDIT_GET 处理程序中的 s.backlog 赋值操作 - audit_receive() backlog 检查 - audit_log_start() backlog 检查和 pr_warn()
KCSAN(Kernel Concurrency Sanitizer)报告了以下冲突的访问模式(其中一个示例): ================================================================== BUG: KCSAN: data-race in audit_log_start / skb_dequeue
write (marked) to 0xffffffff8512ee20 of 4 bytes by task 661 on cpu 57: skb_dequeue+0x70/0xf0 kauditd_send_queue+0x71/0x220 kauditd_thread+0x1cb/0x430 kthread+0x1c2/0x210 ret_from_fork+0x162/0x1a0 ret_from_fork_asm+0x1a/0x30
read to 0xffffffff8512ee20 of 4 bytes by task 36586 on cpu 1: audit_log_start+0x2a0/0x6b0 audit_core_dumps+0x64/0xa0 do_coredump+0x14b/0x1260 get_signal+0xeb2/0xf70 arch_do_signal_or_restart+0x41/0x170 exit_to_user_mode_loop+0xa2/0x1c0 do_syscall_64+0x1a3/0x1c0 entry_SYSCALL_64_after_hwframe+0x76/0xe0
value changed: 0x00000001 -> 0x00000000 ==================================================================
通过切换到无锁辅助函数 `skb_queue_len_lockless()` 来解决此竞争问题,该函数内部使用 `READ_ONCE()`,并与写入端已存在的受 `WRITE_ONCE()` 保护的写访问正确配对。
[PM:调整行长度]
Be aware that VulDB is the high quality source for vulnerability data.