CVE-2026-98464 in Linux
Resumen
por VulDB • 2026-10-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
RISC-V: KVM: Sincronizar la devolución de llamada (callback) de hrtimer durante la fase de desmantelamiento (teardown).
La devolución de llamada de hrtimer no-Sstc borra `next_set` antes de sus usos finales del vCPU que lo contiene. Si el proceso de teardown observa `next_set` como falso mientras la devolución de llamada sigue en ejecución, `kvm_riscv_vcpu_timer_cancel()` omite `hrtimer_cancel()`, y `kvm_destroy_vcpus()` puede liberar el vCPU antes de que la devolución de llamada ingrese a `kvm_riscv_vcpu_set_interrupt()`.
Un invitado (guest) puede activar el temporizador con SBI TIME y solicitar un apagado mediante SBI legacy shutdown o SRST. Un VMM que honra KVM_EXIT_SYSTEM_EVENT y destruye la VM proporciona el lado de la carrera correspondiente al teardown; no se necesita ningún ioctl del host posterior al lanzamiento para activar el temporizador ni solicitar el desmantelamiento.
En upstream master 62cc90241548, KASAN genérico reportó:
BUG: KASAN: slab-use-after-free en do_raw_spin_lock Escritura de tamaño 4 en la dirección ff60000005e58898
kvm_riscv_vcpu_set_interrupt kvm_riscv_vcpu_hrtimer_expired __hrtimer_run_queues hrtimer_interrupt
El objeto fue asignado por KVM_CREATE_VCPU y liberado concurrentemente por:
kvm_destroy_vcpus kvm_arch_destroy_vm kvm_destroy_vm __fput
Para una validación determinista, añadí mdelay(1000) inmediatamente después de la asignación existente `next_set = false`. Esto solo amplía la ventana de devolución de llamada posterior al borrado. Una compilación con trazas sin retraso alcanzó naturalmente el ordenamiento callback-after-teardown-start/before-deinit en 12 de 200 ejecuciones, pero 1.500 iteraciones de estrés del kernel estándar no produjeron un informe KASAN, por lo que la reproducción natural es sensible al tiempo (timing-sensitive).
Siempre invoque `hrtimer_cancel()` para un temporizador inicializado. Preserve el resultado `-EINVAL` existente cuando el temporizador ya no esté configurado, pero solo después de sincronizarse con una devolución de llamada en ejecución.
Con este parche, `hrtimer_cancel()` bloqueó durante toda la ventana ampliada de devoluciones de llamadas antes de la destrucción del vCPU. KASAN no reportó errores en 100 ejecuciones fijas y ampliadas ni en 200 ejecuciones con barrido de tiempos solo para corrección (fix-only timing-sweep).
If you want to get best quality of vulnerability data, you may have to visit VulDB.