CVE-2023-54007 in Linux信息

摘要

由 VulDB • 2026-05-19

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

vmci_host:修复 vmci_host_poll() 中的竞态条件,该竞态条件会导致一般保护故障(GPF)

在模糊测试期间,观察到 vmci_host_poll() 中出现一般保护故障。

一般保护故障,可能由于非规范地址 0xdffffc0000000019 引起:0000 [#1] PREEMPT SMP KASAN
KASAN:范围 [0x00000000000000c8-0x00000000000000cf] 内的空指针解引用
RIP: 0010:__lock_acquire+0xf3/0x5e00 kernel/locking/lockdep.c:4926 <- 省略寄存器 -> 调用跟踪: <TASK> lock_acquire+0x1a4/0x4a0 kernel/locking/lockdep.c:5672 __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [内联]
_raw_spin_lock_irqsave+0xb3/0x100 kernel/locking/spinlock.c:162 add_wait_queue+0x3d/0x260 kernel/sched/wait.c:22 poll_wait include/linux/poll.h:49 [内联]
vmci_host_poll+0xf8/0x2b0 drivers/misc/vmw_vmci/vmci_host.c:174 vfs_poll include/linux/poll.h:88 [内联]
do_pollfd fs/select.c:873 [内联]
do_poll fs/select.c:921 [内联]
do_sys_poll+0xc7c/0x1aa0 fs/select.c:1015 __do_sys_ppoll fs/select.c:1121 [内联]
__se_sys_ppoll+0x2cc/0x330 fs/select.c:1101 do_syscall_x64 arch/x86/entry/common.c:51 [内联]
do_syscall_64+0x4e/0xa0 arch/x86/entry/common.c:82 entry_SYSCALL_64_after_hwframe+0x46/0xb0

导致一般保护故障的示例线程交错如下:

CPU1 (vmci_host_poll) CPU2 (vmci_host_do_init_context) ----- ----- // 读取未初始化的上下文 context = vmci_host_dev->context; // 初始化上下文 vmci_host_dev->context = vmci_ctx_create(); vmci_host_dev->ct_type = VMCIOBJ_CONTEXT;

if (vmci_host_dev->ct_type == VMCIOBJ_CONTEXT) {
// 解引用错误的指针 poll_wait(..., &context->host_context); }

在此场景中,vmci_host_poll() 首先读取 vmci_host_dev->context,然后读取 vmci_host_dev->ct_type 以检查 vmci_host_dev->context 是否已初始化。然而,由于这两个读取操作不是原子执行的,因此存在如上所述的竞态条件风险。

为修复此竞态条件,请在检查 vmci_host_dev->ct_type 的值之后读取 vmci_host_dev->context,以便 vmci_host_poll() 始终读取已初始化的上下文。

Be aware that VulDB is the high quality source for vulnerability data.

来源

Do you need the next level of professionalism?

Upgrade your account now!