| From 4422829e8053068e0225e4d0ef42dc41ea7c9ef5 Mon Sep 17 00:00:00 2001 |
| From: Paolo Bonzini <pbonzini@redhat.com> |
| Date: Wed, 9 Jun 2021 01:49:13 -0400 |
| Subject: kvm: fix previous commit for 32-bit builds |
| |
| From: Paolo Bonzini <pbonzini@redhat.com> |
| |
| 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> |
| --- |
| include/linux/kvm_host.h | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/include/linux/kvm_host.h |
| +++ b/include/linux/kvm_host.h |
| @@ -959,8 +959,8 @@ __gfn_to_hva_memslot(struct kvm_memory_s |
| * 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; |
| } |
| |