U.S. flag   An official website of the United States government
Dot gov

Official websites use .gov
A .gov website belongs to an official government organization in the United States.

Https

Secure .gov websites use HTTPS
A lock (Dot gov) or https:// means you've safely connected to the .gov website. Share sensitive information only on official, secure websites.

Vulnerability Change Records for CVE-2026-46295

Change History

CVE Translated by NIST 7/23/2026 4:10:00 AM

Action Type Old Value New Value
Added Translation

                  
                
              
Title: Linux, Description: En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:

KVM: x86: Realizar escaneo IRR en __kvm_apic_update_irr incluso si PIR está vacío

Recurrir a apic_find_highest_vector() cuando PID.ON está establecido pero PIR resulta estar vacío, para reportar correctamente la interrupción pendiente más alta del IRR existente.

En una prueba de estrés de VM anidada, la siguiente ADVERTENCIA se activa en vmx_check_nested_events() cuando kvm_cpu_has_interrupt() reporta una interrupción pendiente pero la subsiguiente kvm_apic_has_interrupt() (que invoca vmx_sync_pir_to_irr() de nuevo) devuelve -1:

  ADVERTENCIA: CPU: 99 PID: 57767 en arch/x86/kvm/vmx/nested.c:4449 vmx_check_nested_events+0x6bf/0x6e0 [kvm_intel]
  Traza de Llamada:
   kvm_check_and_inject_events
   vcpu_enter_guest.constprop.0
   vcpu_run
   kvm_arch_vcpu_ioctl_run
   kvm_vcpu_ioctl
   __x64_sys_ioctl
   do_syscall_64
   entry_SYSCALL_64_after_hwframe

La causa raíz es una condición de carrera entre vmx_sync_pir_to_irr() en la vCPU objetivo y __vmx_deliver_posted_interrupt() en una vCPU remitente. El remitente realiza dos operaciones individualmente atómicas que no son una única transacción:

  1. pi_test_and_set_pir(vector) -- establece el bit PIR
  2. pi_test_and_set_on() -- establece PID.ON

El siguiente entrelazado desencadena el error:

  vCPU remitente (IPI):              vCPU objetivo (1ª sync_pir_to_irr):
  B1: establecer PIR[vector]
                                  A1: pi_clear_on()
                                  A2: pi_harvest_pir() -> ve el bit B1
                                  A3: xchg() -> consume el bit, PIR=0
                                      (la 1ª sincronización devuelve el max_irr correcto)
  B2: establecer PID.ON = 1

                                  vCPU objetivo (2ª sync_pir_to_irr):
                                  C1: pi_test_on() -> VERDADERO (de B2)
                                  C2: pi_clear_on() -> ON=0
                                  C3: pi_harvest_pir() -> PIR vacío
                                  C4: max_irr = -1, retorno anticipado
                                      IRR NO ESCANEADO

La interrupción no se pierde (reside en el IRR de la primera sincronización y se recupera en la siguiente iteración de vcpu_enter_guest()), pero el max_irr incorrecto causa una ADVERTENCIA espuria y un ciclo de VM-Enter/VM-Exit de L2 desperdiciado.