diff options
author | Oliver Upton <oliver.upton@linux.dev> | 2024-10-17 00:19:46 +0000 |
---|---|---|
committer | Marc Zyngier <maz@kernel.org> | 2024-10-17 09:20:48 +0100 |
commit | 5978d4ec7e82ffc472ac2645601dd10b09e61b0f (patch) | |
tree | 25414eae137077cf243ffd15f36e230f36550f3f /arch/arm64 | |
parent | c6c167afa090ea0451f91814e1318755a8fb8bb9 (diff) | |
download | linux-5978d4ec7e82ffc472ac2645601dd10b09e61b0f.tar.gz linux-5978d4ec7e82ffc472ac2645601dd10b09e61b0f.tar.bz2 linux-5978d4ec7e82ffc472ac2645601dd10b09e61b0f.zip |
KVM: arm64: vgic: Don't check for vgic_ready() when setting NR_IRQS
KVM commits to a particular sizing of SPIs when the vgic is initialized,
which is before the point a vgic becomes ready. On top of that, KVM
supplies a default amount of SPIs should userspace not explicitly
configure this.
As such, the check for vgic_ready() in the handling of
KVM_DEV_ARM_VGIC_GRP_NR_IRQS is completely wrong, and testing if nr_spis
is nonzero is sufficient for preventing userspace from playing games
with us.
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20241017001947.2707312-2-oliver.upton@linux.dev
Signed-off-by: Marc Zyngier <maz@kernel.org>
Diffstat (limited to 'arch/arm64')
-rw-r--r-- | arch/arm64/kvm/vgic/vgic-kvm-device.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm64/kvm/vgic/vgic-kvm-device.c b/arch/arm64/kvm/vgic/vgic-kvm-device.c index 1d26bb5b02f4..5f4f57aaa23e 100644 --- a/arch/arm64/kvm/vgic/vgic-kvm-device.c +++ b/arch/arm64/kvm/vgic/vgic-kvm-device.c @@ -236,7 +236,12 @@ static int vgic_set_common_attr(struct kvm_device *dev, mutex_lock(&dev->kvm->arch.config_lock); - if (vgic_ready(dev->kvm) || dev->kvm->arch.vgic.nr_spis) + /* + * Either userspace has already configured NR_IRQS or + * the vgic has already been initialized and vgic_init() + * supplied a default amount of SPIs. + */ + if (dev->kvm->arch.vgic.nr_spis) ret = -EBUSY; else dev->kvm->arch.vgic.nr_spis = |