CVE-2023-54007 in Linux
Сводка
по VulDB • 20.05.2026
В ядре Linux устранена следующая уязвимость:
vmci_host: исправлена гонка данных (race condition) в функции vmci_host_poll(), приводившая к ошибке защиты (GPF)
В ходе фаззинга в функции vmci_host_poll() наблюдается ошибка общей защиты (general protection fault).
general protection fault, вероятно, из-за неканонического адреса 0xdffffc0000000019: 0000 [#1] PREEMPT SMP KASAN
KASAN: null-ptr-deref в диапазоне [0x00000000000000c8-0x00000000000000cf]
RIP: 0010:__lock_acquire+0xf3/0x5e00 kernel/locking/lockdep.c:4926 <- пропуск регистров -> След вызова (Call Trace): <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 инициализирован. Однако, поскольку эти два чтения не выполняются атомарно, существует вероятность возникновения гонки данных (race condition), описанной выше.
Для устранения этой гонки данных чтение vmci_host_dev->context должно выполняться после проверки значения vmci_host_dev->ct_type, чтобы функция vmci_host_poll() всегда читала инициализированный контекст.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.