[PATCH 0/3] KVM: arm64: vgic-v3: Make LPI disabling robust
Marc Zyngier
maz at kernel.org
Tue Sep 22 14:42:09 PDT 2026
Yuchao Zhang reported that disabling LPIs on one CPU from another
could result in UAFs and other horrors.
There are two reasons for this:
- the last_lr_irq pointer does not contribute to LPI refcount, and
that LPI being removed results in a dangling pointer
- LPIs can be deleted from a remote vcpu by disabling them while that
vcpu is actually running, and has LPIs in its LRs.
Address the two issues in one go, by actively taking a refcount on all
IRQs referenced by last_lr_irq, and making sure that disabling LPIs
force all vcpus to be paused, making it safe.
Marc Zyngier (3):
KVM: arm64: vgic: Allow last_lr_irq to be NULL when LRs are not
overflowing
KVM: arm64: vgic: Take a refcount on IRQs referenced by last_lr_irq
KVM: arm64: vgic: Stop the VM when disabling LPIs
arch/arm64/kvm/vgic/vgic-mmio-v3.c | 10 ++++++++++
arch/arm64/kvm/vgic/vgic-v2.c | 6 ++++--
arch/arm64/kvm/vgic/vgic-v3.c | 6 ++++--
arch/arm64/kvm/vgic/vgic.c | 21 ++++++++++++++++-----
4 files changed, 34 insertions(+), 9 deletions(-)
--
2.47.3
More information about the linux-arm-kernel
mailing list