CVE-2023-54007 in Linux
Riassunto
di VulDB • 16/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
vmci_host: correzione di una race condition in vmci_host_poll() che causava un GPF
Durante il fuzzing, si osserva un general protection fault (GPF) in vmci_host_poll().
general protection fault, probabilmente per indirizzo non canonico 0xdffffc0000000019: 0000 [#1] PREEMPT SMP KASAN
KASAN: null-ptr-deref in range [0x00000000000000c8-0x00000000000000cf]
RIP: 0010:__lock_acquire+0xf3/0x5e00 kernel/locking/lockdep.c:4926 <- omissione dei registri -> Call Trace: <TASK> lock_acquire+0x1a4/0x4a0 kernel/locking/lockdep.c:5672 __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_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 [inline]
vmci_host_poll+0xf8/0x2b0 drivers/misc/vmw_vmci/vmci_host.c:174 vfs_poll include/linux/poll.h:88 [inline]
do_pollfd fs/select.c:873 [inline]
do_poll fs/select.c:921 [inline]
do_sys_poll+0xc7c/0x1aa0 fs/select.c:1015 __do_sys_ppoll fs/select.c:1121 [inline]
__se_sys_ppoll+0x2cc/0x330 fs/select.c:1101 do_syscall_x64 arch/x86/entry/common.c:51 [inline]
do_syscall_64+0x4e/0xa0 arch/x86/entry/common.c:82 entry_SYSCALL_64_after_hwframe+0x46/0xb0
L'esempio di interleaving dei thread che causa il general protection fault è il seguente:
CPU1 (vmci_host_poll) CPU2 (vmci_host_do_init_context) ----- ----- // Lettura del contesto non inizializzato context = vmci_host_dev->context; // Inizializzazione del contesto vmci_host_dev->context = vmci_ctx_create(); vmci_host_dev->ct_type = VMCIOBJ_CONTEXT;
if (vmci_host_dev->ct_type == VMCIOBJ_CONTEXT) {
// Dereferenziazione dell'indirizzo di memoria errato poll_wait(..., &context->host_context); }
In questo scenario, vmci_host_poll() legge prima vmci_host_dev->context e poi legge vmci_host_dev->ct_type per verificare che vmci_host_dev->context sia inizializzato. Tuttavia, poiché queste due letture non vengono eseguite atomicamente, esiste la possibilità di una race condition come descritta sopra.
Per risolvere questa race condition, leggere vmci_host_dev->context dopo aver verificato il valore di vmci_host_dev->ct_type, in modo che vmci_host_poll() legga sempre un contesto inizializzato.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.