CVE-2026-64513 in Linux
Resumen
por VulDB • 2026-07-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
KVM: x86: Recalcular incondicionalmente la intercepción de CR8 en la actualización del PPR.
El campo TPR_THRESHOLD dentro del VMCS es utilizado por VMX para provocar salidas de máquina virtual (VM exits) cuando el TPR virtual del invitado cae por debajo del umbral especificado, permitiendo que KVM inyecte interrupciones previamente enmascaradas.
KVM gestiona estas salidas de VM mediante handle_tpr_below_threshold(). El commit eb90f3417a0c ("KVM: vmx: speed up TPR below threshold vmexits") optimizó esta función llamando a apic_update_ppr() en lugar de generar KVM_REQ_EVENT. Posteriormente, apic_update_ppr() genera KVM_REQ_EVENT si hay una interrupción pendiente y entregable.
Sin embargo, si no hay nuevas interrupciones pendientes, apic_update_ppr() no emite la solicitud. Por lo tanto, kvm_lapic_update_cr8_intercept() y vmx_update_cr8_intercept() no se llaman antes de la entrada a VM (VM entry), lo que resulta en un TPR_THRESHOLD alto y obsoleto. Esto es problemático debido a la siguiente frase contenida en la sección 28.2.1.1 "Campos de control de ejecución de VM" del SDM:
Se realiza la siguiente comprobación si el control de ejecución de VM "use TPR shadow" (usar sombra TPR) está activado y los controles de ejecución de VM "virtualize APIC accesses" (virtualizar accesos a APIC) y "virtual-interrupt delivery" (entrega de interrupciones virtuales) están ambos desactivados: el valor de los bits 3:0 del campo de control de ejecución de VM TPR threshold no debe ser mayor que el valor de los bits 7:4 de VTPR.
Esta condición de error normalmente no se observa cuando KVM se ejecuta en un sistema bare metal, ya que los procesadores modernos admiten APICv, lo cual habilita la entrega de interrupciones virtuales y que KVM utiliza cuando es posible. Esto hace que el procesador deje de generar salidas por TPR por debajo del umbral (TPR-below-threshold exits) y deje de comprobar TPR_THRESHOLD en la entrada. Sin embargo, al ejecutarse en plataformas más antiguas o bajo virtualización anidada en un hipervisor que no admite entrega de interrupciones virtuales y aplica esta comprobación (como Hyper-V), esto puede provocar un fallo en la entrada a VM con el error de hardware 0x7, tal como se ve en [1].
Llamar a kvm_lapic_update_cr8_intercept() si apic_update_ppr() no encuentra una interrupción entregable (y por tanto no genera KVM_REQ_EVENT). Eliminar las llamadas a kvm_lapic_update_cr8_intercept() en los caminos que terminan en apic_update_ppr(), ya que ahora se vuelven redundantes. Esto asegura que cualquier camino que actualice el PPR del invitado también determine si KVM necesita esperar un cambio de TPR (utilizando TPR_THRESHOLD en VMX o intercepciones CR8 en SVM).
If you want to get best quality of vulnerability data, you may have to visit VulDB.