Message ID | 20210311100016.3830038-3-maz@kernel.org |
---|---|
State | Accepted |
Commit | 262b003d059c6671601a19057e9fe1a5e7f23722 |
Headers | show |
Series | None | expand |
On Thu, Mar 11, 2021 at 10:00:16AM +0000, Marc Zyngier wrote: > When registering a memslot, we check the size and location of that > memslot against the IPA size to ensure that we can provide guest > access to the whole of the memory. > > Unfortunately, this check rejects memslot that end-up at the exact > limit of the addressing capability for a given IPA size. For example, > it refuses the creation of a 2GB memslot at 0x8000000 with a 32bit > IPA space. > > Fix it by relaxing the check to accept a memslot reaching the > limit of the IPA space. > > Fixes: e55cac5bf2a9 ("kvm: arm/arm64: Prepare for VM specific stage2 translations") Isn't this actually fixing commit c3058d5da222 ("arm/arm64: KVM: Ensure memslots are within KVM_PHYS_SIZE") ? > Reviewed-by: Eric Auger <eric.auger@redhat.com> > Signed-off-by: Marc Zyngier <maz@kernel.org> > Cc: stable@vger.kernel.org > --- > arch/arm64/kvm/mmu.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c > index 77cb2d28f2a4..8711894db8c2 100644 > --- a/arch/arm64/kvm/mmu.c > +++ b/arch/arm64/kvm/mmu.c > @@ -1312,8 +1312,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, > * Prevent userspace from creating a memory region outside of the IPA > * space addressable by the KVM guest IPA space. > */ > - if (memslot->base_gfn + memslot->npages >= > - (kvm_phys_size(kvm) >> PAGE_SHIFT)) > + if ((memslot->base_gfn + memslot->npages) > (kvm_phys_size(kvm) >> PAGE_SHIFT)) > return -EFAULT; > > mmap_read_lock(current->mm); > -- > 2.29.2 > Otherwise Reviewed-by: Andrew Jones <drjones@redhat.com> Thanks, drew
On 2021-03-11 11:15, Andrew Jones wrote: > On Thu, Mar 11, 2021 at 10:00:16AM +0000, Marc Zyngier wrote: >> When registering a memslot, we check the size and location of that >> memslot against the IPA size to ensure that we can provide guest >> access to the whole of the memory. >> >> Unfortunately, this check rejects memslot that end-up at the exact >> limit of the addressing capability for a given IPA size. For example, >> it refuses the creation of a 2GB memslot at 0x8000000 with a 32bit >> IPA space. >> >> Fix it by relaxing the check to accept a memslot reaching the >> limit of the IPA space. >> >> Fixes: e55cac5bf2a9 ("kvm: arm/arm64: Prepare for VM specific stage2 >> translations") > > Isn't this actually fixing commit c3058d5da222 ("arm/arm64: KVM: Ensure > memslots are within KVM_PHYS_SIZE") ? Ah, yes, that's indeed better (more backport work... ;-) Thanks, M. -- Jazz is not dead. It just smells funny...
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 77cb2d28f2a4..8711894db8c2 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1312,8 +1312,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, * Prevent userspace from creating a memory region outside of the IPA * space addressable by the KVM guest IPA space. */ - if (memslot->base_gfn + memslot->npages >= - (kvm_phys_size(kvm) >> PAGE_SHIFT)) + if ((memslot->base_gfn + memslot->npages) > (kvm_phys_size(kvm) >> PAGE_SHIFT)) return -EFAULT; mmap_read_lock(current->mm);