KVM: arm64: vgic-v3: Check ITS region is not above the VM IPA size
authorRicardo Koller <ricarkol@google.com>
Tue, 5 Oct 2021 01:19:14 +0000 (18:19 -0700)
committerMarc Zyngier <maz@kernel.org>
Mon, 11 Oct 2021 08:31:42 +0000 (09:31 +0100)
Verify that the ITS region does not extend beyond the VM-specified IPA
range (phys_size).

  base + size > phys_size AND base < phys_size

Add the missing check into vgic_its_set_attr() which is called when
setting the region.

Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Ricardo Koller <ricarkol@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20211005011921.437353-5-ricarkol@google.com
arch/arm64/kvm/vgic/vgic-its.c

index 61728c543eb9c1165588b975033ec0f7b91048fd..ad55bb8cd30f501d41c6c87aefb66ce3f6fc5799 100644 (file)
@@ -2710,8 +2710,8 @@ static int vgic_its_set_attr(struct kvm_device *dev,
                if (copy_from_user(&addr, uaddr, sizeof(addr)))
                        return -EFAULT;
 
-               ret = vgic_check_ioaddr(dev->kvm, &its->vgic_its_base,
-                                       addr, SZ_64K);
+               ret = vgic_check_iorange(dev->kvm, its->vgic_its_base,
+                                        addr, SZ_64K, KVM_VGIC_V3_ITS_SIZE);
                if (ret)
                        return ret;