projects
/
linux-2.6-microblaze.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
60ad25e
)
KVM: arm64: vgic-v3: Sanitise guest writes to GICR_INVLPIR
author
Marc Zyngier
<maz@kernel.org>
Sun, 17 Nov 2024 16:57:54 +0000
(16:57 +0000)
committer
Oliver Upton
<oliver.upton@linux.dev>
Thu, 21 Nov 2024 01:21:07 +0000
(17:21 -0800)
Make sure we filter out non-LPI invalidation when handling writes
to GICR_INVLPIR.
Fixes:
4645d11f4a553
("KVM: arm64: vgic-v3: Implement MMIO-based LPI invalidation")
Reported-by: Alexander Potapenko <glider@google.com>
Tested-by: Alexander Potapenko <glider@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Link:
https://lore.kernel.org/r/20241117165757.247686-2-maz@kernel.org
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/vgic/vgic-mmio-v3.c
patch
|
blob
|
history
diff --git
a/arch/arm64/kvm/vgic/vgic-mmio-v3.c
b/arch/arm64/kvm/vgic/vgic-mmio-v3.c
index
9e50928
..
70a4485
100644
(file)
--- a/
arch/arm64/kvm/vgic/vgic-mmio-v3.c
+++ b/
arch/arm64/kvm/vgic/vgic-mmio-v3.c
@@
-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);