]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
kvm: fix previous commit for 32-bit builds
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 9 Jun 2021 05:49:13 +0000 (01:49 -0400)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Thu, 15 Jul 2021 17:24:15 +0000 (19:24 +0200)
BugLink: https://bugs.launchpad.net/bugs/1934012
commit 4422829e8053068e0225e4d0ef42dc41ea7c9ef5 upstream.

array_index_nospec does not work for uint64_t on 32-bit builds.
However, the size of a memory slot must be less than 20 bits wide
on those system, since the memory slot must fit in the user
address space.  So just store it in an unsigned long.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
include/linux/kvm_host.h

index 08298bd38718d6443acba06dce16f82570009384..2cb9c5cdd1498b0e833098e7f7b8bc1bedb862cf 100644 (file)
@@ -1117,8 +1117,8 @@ __gfn_to_hva_memslot(struct kvm_memory_slot *slot, gfn_t gfn)
         * table walks, do not let the processor speculate loads outside
         * the guest's registered memslots.
         */
-       unsigned long offset = array_index_nospec(gfn - slot->base_gfn,
-                                                 slot->npages);
+       unsigned long offset = gfn - slot->base_gfn;
+       offset = array_index_nospec(offset, slot->npages);
        return slot->userspace_addr + offset * PAGE_SIZE;
 }