• Adamos Ttofari's avatar
    KVM: x86: ioapic: Fix level-triggered EOI and userspace I/OAPIC reconfigure race · fceb3a36
    Adamos Ttofari authored
    When scanning userspace I/OAPIC entries, intercept EOI for level-triggered
    IRQs if the current vCPU has a pending and/or in-service IRQ for the
    vector in its local API, even if the vCPU doesn't match the new entry's
    destination.  This fixes a race between userspace I/OAPIC reconfiguration
    and IRQ delivery that results in the vector's bit being left set in the
    remote IRR due to the eventual EOI not being forwarded to the userspace
    I/OAPIC.
    
    Commit 0fc5a36d ("KVM: x86: ioapic: Fix level-triggered EOI and IOAPIC
    reconfigure race") fixed the in-kernel IOAPIC, but not the userspace
    IOAPIC configuration, which has a similar race.
    
    Fixes: 0fc5a36d ("KVM: x86: ioapic: Fix level-triggered EOI and IOAPIC reconfigure race")
    Signed-off-by: default avatarAdamos Ttofari <attofari@amazon.de>
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20221208094415.12723-1-attofari@amazon.de>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    fceb3a36
irq_comm.c 11.2 KB