]> git.baikalelectronics.ru Git - kernel.git/commitdiff
KVM: s390: Skip gfn/size sanity checks on memslot DELETE or FLAGS_ONLY
authorSean Christopherson <seanjc@google.com>
Mon, 6 Dec 2021 19:54:21 +0000 (20:54 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Dec 2021 09:24:27 +0000 (04:24 -0500)
Sanity check the hva, gfn, and size of a userspace memory region only if
any of those properties can change, i.e. skip the checks for DELETE and
FLAGS_ONLY.  KVM doesn't allow moving the hva or changing the size, a gfn
change shows up as a MOVE even if flags are being modified, and the
checks are pointless for the DELETE case as userspace_addr and gfn_base
are zeroed by common KVM.

No functional change intended.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
Message-Id: <05430738437ac2c9c7371ac4e11f4a533e1677da.1638817640.git.maciej.szmigiero@oracle.com>

arch/s390/kvm/kvm-s390.c

index 5dddd7817905a1f2a2d1f0fb668102d7d2e60884..251059ff81fcb9dda60e01e65a0e531a2db15b6b 100644 (file)
@@ -5011,7 +5011,14 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                   struct kvm_memory_slot *new,
                                   enum kvm_mr_change change)
 {
-       gpa_t size = new->npages * PAGE_SIZE;
+       gpa_t size;
+
+       /* When we are protected, we should not change the memory slots */
+       if (kvm_s390_pv_get_handle(kvm))
+               return -EINVAL;
+
+       if (change == KVM_MR_DELETE || change == KVM_MR_FLAGS_ONLY)
+               return 0;
 
        /* A few sanity checks. We can have memory slots which have to be
           located/ended at a segment boundary (1MB). The memory in userland is
@@ -5021,15 +5028,13 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
        if (new->userspace_addr & 0xffffful)
                return -EINVAL;
 
+       size = new->npages * PAGE_SIZE;
        if (size & 0xffffful)
                return -EINVAL;
 
        if ((new->base_gfn * PAGE_SIZE) + size > kvm->arch.mem_limit)
                return -EINVAL;
 
-       /* When we are protected, we should not change the memory slots */
-       if (kvm_s390_pv_get_handle(kvm))
-               return -EINVAL;
        return 0;
 }