CVE-2026-99082 in Linux
Resumen
por VulDB • 2026-10-23
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
KVM: x86: Utilizar los memslots activos para la caché MMIO por vCPU
KVM etiqueta la caché MMIO por vCPU con una generación del memslot para que una actualización del memslot invalide la información MMIO en caché. Tanto las rutas de llenado como de validación utilizan kvm_memslots(), lo cual selecciona incondicionalmente el espacio de direcciones 0, incluso cuando la vCPU se está ejecutando en SMM y utiliza el espacio de direcciones 1.
El commit 56f17dd3fbc4 ("kvm: x86: fix stale mmio cache bug") añadió la generación del memslot a la clave de caché para que una actualización del memslot no dejara válida una entrada obsoleta. Cuando el commit 699023e23965 ("KVM: x86: add SMM to the MMU role, support SMRAM address space") añadió el espacio de direcciones SMM, estos auxiliares no se convirtieron para utilizar los memslots activos.
Como consecuencia, una actualización en los memslots de SMM puede dejar que una entrada del antiguo espacio de direcciones SMM parezca válida después de que la vCPU regrese al espacio de direcciones normal. Un invitado (guest) puede entonces provocar un acceso a RAM válida con el mismo GFN para ser devuelto al espacio de usuario como KVM_EXIT_MMIO.
Completar esa salida a través del espacio de direcciones RAM del VMM escribe la página subyacente sin pasar por la ruta de seguimiento de escrituras de KVM. Si la página respalda una tabla EPT anidada, KVM puede seguir utilizando tradacciones en sombra derivadas del contenido antiguo. La macro WARN_ON_ONCE() en kvm_mmu_write_protect_fault() detecta esta combinación inválida de caché y memslot.
Utilizar los memslots activos de la vCPU al almacenar en caché y validar la entrada. Las generaciones de memslot son únicas a través de los espacios de direcciones, por lo que la generación también distingue las vistas normal y SMM. Esto coincide con la caché MMIO SPTE, que ya utiliza kvm_vcpu_memslots().
En un kernel actual-mainline sin parchear, una prueba de regresión que llena la caché en SMM y actualiza únicamente los memslots de SMM falla al escribir RAM como se pretendía y activa la advertencia kvm_mmu_write_protect_fault(). Con este cambio, la misma prueba completa la escritura de RAM sin generar advertencias. Las pruebas unitarias (selftests) x86/smm_test, set_memory_region_test y memslot_modification_stress_test también pasan correctamente.
If you want to get best quality of vulnerability data, you may have to visit VulDB.