Commit d561491b authored by Marc Zyngier's avatar Marc Zyngier Committed by Oliver Upton
Browse files

KVM: arm64: vgic-v3: Sanitise guest writes to GICR_INVLPIR



Make sure we filter out non-LPI invalidation when handling writes
to GICR_INVLPIR.

Fixes: 4645d11f ("KVM: arm64: vgic-v3: Implement MMIO-based LPI invalidation")
Reported-by: default avatarAlexander Potapenko <glider@google.com>
Tested-by: default avatarAlexander Potapenko <glider@google.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20241117165757.247686-2-maz@kernel.org


Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
parent 60ad25e1
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -530,6 +530,7 @@ static void vgic_mmio_write_invlpi(struct kvm_vcpu *vcpu,
				   unsigned long val)
{
	struct vgic_irq *irq;
	u32 intid;

	/*
	 * If the guest wrote only to the upper 32bit part of the
@@ -541,9 +542,13 @@ static void vgic_mmio_write_invlpi(struct kvm_vcpu *vcpu,
	if ((addr & 4) || !vgic_lpis_enabled(vcpu))
		return;

	intid = lower_32_bits(val);
	if (intid < VGIC_MIN_LPI)
		return;

	vgic_set_rdist_busy(vcpu, true);

	irq = vgic_get_irq(vcpu->kvm, NULL, lower_32_bits(val));
	irq = vgic_get_irq(vcpu->kvm, NULL, intid);
	if (irq) {
		vgic_its_inv_lpi(vcpu->kvm, irq);
		vgic_put_irq(vcpu->kvm, irq);