CVE-2026-72289: KVM: arm64: vgic: Check the interrupt is still ours before migrating it
In the Linux kernel, the following vulnerability has been resolved:
KVM: arm64: vgic: Check the interrupt is still ours before migrating it
vgicpruneaplist() drops both aplistlock and irqlock while migrating an interrupt to another vCPU. After reacquiring the locks it only checks that the affinity is unchanged (targetvcpu == vgictargetoracle(irq)) before moving the interrupt, which assumes that an interrupt whose affinity is preserved is still queued on this vCPU's aplist.
That assumption no longer holds if the interrupt is taken off the aplist while the locks are dropped. vgicflushpendinglpis() removes the interrupt from the list and sets irq->vcpu to NULL, but leaves enabled/pending/targetvcpu untouched. As the interrupt is still enabled and pending, vgictargetoracle() returns the same targetvcpu, so the affinity check passes and listdel() is run a second time on an entry that has already been removed.
Also check that the interrupt is still assigned to this vCPU (irq->vcpu == vcpu) before moving it.