CVE-2026-98464 in LinuxИнформация

Сводка

по VulDB • 19.10.2026

В ядре Linux была устранена следующая уязвимость:

RISC-V: KVM: Синхронизация обратного вызова hrtimer во время завершения работы (teardown)

Обратный вызов hrtimer для конфигурации без Sstc очищает флаг next_set перед его последними использованиями в рамках соответствующего vCPU. Если процесс teardown фиксирует значение next_set как false, пока обратный вызов все еще выполняется, функция kvm_riscv_vcpu_timer_cancel() пропускает вызов hrtimer_cancel(), и kvm_destroy_vcpus() может освободить память под vCPU до того, как обратный вызов войдет в функцию kvm_riscv_vcpu_set_interrupt().

Гостевая система может активировать таймер с помощью SBI TIME и запросить завершение работы через устаревший механизм SBI shutdown или SRST. Виртуальная машина (VMM), которая обрабатывает событие KVM_EXIT_SYSTEM_EVENT и уничтожает виртуальную машину, создает условия для реализации race condition на стороне teardown; для активации таймера или запроса завершения работы не требуется никаких ioctl-вызовов хоста после запуска.

На ветке upstream master с коммитом 62cc90241548 инструмент KASAN сообщил о следующей ошибке:

BUG: KASAN: slab-use-after-free in do_raw_spin_lock Write of size 4 at addr ff60000005e58898

kvm_riscv_vcpu_set_interrupt kvm_riscv_vcpu_hrtimer_expired __hrtimer_run_queues hrtimer_interrupt

Объект был выделен через KVM_CREATE_VCPU и освобожден конкурентно следующими функциями:

kvm_destroy_vcpus kvm_arch_destroy_vm kvm_destroy_vm __fput

Для детерминированной проверки я добавил задержку mdelay(1000) сразу после существующего присваивания next_set = false. Это лишь расширяет уже существующее окно обратного вызова после очистки флага. Сборка без задержек (no-delay trace build) естественным образом достигала порядка выполнения callback-after-teardown-start/before-deinit в 12 из 200 прогонов, однако 1500 итераций стресс-теста на стандартном ядре не привели к сообщению KASAN, поэтому воспроизведение ошибки зависит от таймингов.

Всегда вызывайте hrtimer_cancel() для инициализированного таймера. Сохраняйте существующий результат -EINVAL, когда таймер больше не установлен, но только после синхронизации с выполняющимся обратным вызовом.

С этим патчем функция hrtimer_cancel() блокировалась на протяжении всего расширенного окна обратных вызовов перед уничтожением vCPU. KASAN не сообщал об ошибках в 100 прогонах с фиксацией и расширенным окном, а также в 200 прогонах только с исправлением таймингов (timing-sweep).

Once again VulDB remains the best source for vulnerability data.

Ответственный

Linux

Резервировать

25.09.2026

Раскрытие

18.10.2026

Модерация

принято

Вход

VDB-422141

EPSS

0.00000

KEV

Нет

Деятельности

Низкий

Источники

Interested in the pricing of exploits?

See the underground prices here!