1. 09 Feb, 2021 4 commits
    • Sean Christopherson's avatar
      KVM: x86/xen: Use hva_t for holding hypercall page address · 448841f0
      Sean Christopherson authored
      Use hva_t, a.k.a. unsigned long, for the local variable that holds the
      hypercall page address.  On 32-bit KVM, gcc complains about using a u64
      due to the implicit cast from a 64-bit value to a 32-bit pointer.
      
        arch/x86/kvm/xen.c: In function ‘kvm_xen_write_hypercall_page’:
        arch/x86/kvm/xen.c:300:22: error: cast to pointer from integer of
                                   different size [-Werror=int-to-pointer-cast]
        300 |   page = memdup_user((u8 __user *)blob_addr, PAGE_SIZE);
      
      Cc: Joao Martins <joao.m.martins@oracle.com>
      Cc: David Woodhouse <dwmw@amazon.co.uk>
      Fixes: 23200b7a ("KVM: x86/xen: intercept xen hypercalls if enabled")
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Message-Id: <20210208201502.1239867-1-seanjc@google.com>
      Acked-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
      Reviewed-by: default avatarJoao Martins <joao.m.martins@oracle.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      448841f0
    • David Woodhouse's avatar
      KVM: x86/xen: Remove extra unlock in kvm_xen_hvm_set_attr() · 99df541d
      David Woodhouse authored
      This accidentally ended up locking and then immediately unlocking kvm->lock
      at the beginning of the function. Fix it.
      
      Fixes: a76b9641 ("KVM: x86/xen: add KVM_XEN_HVM_SET_ATTR/KVM_XEN_HVM_GET_ATTR")
      Signed-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
      Message-Id: <20210208232326.1830370-2-dwmw2@infradead.org>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      99df541d
    • Sean Christopherson's avatar
      KVM: Use kvm_pfn_t for local PFN variable in hva_to_pfn_remapped() · a9545779
      Sean Christopherson authored
      Use kvm_pfn_t, a.k.a. u64, for the local 'pfn' variable when retrieving
      a so called "remapped" hva/pfn pair.  In theory, the hva could resolve to
      a pfn in high memory on a 32-bit kernel.
      
      This bug was inadvertantly exposed by commit bd2fae8d ("KVM: do not
      assume PTE is writable after follow_pfn"), which added an error PFN value
      to the mix, causing gcc to comlain about overflowing the unsigned long.
      
        arch/x86/kvm/../../../virt/kvm/kvm_main.c: In function ‘hva_to_pfn_remapped’:
        include/linux/kvm_host.h:89:30: error: conversion from ‘long long unsigned int’
                                        to ‘long unsigned int’ changes value from
                                        ‘9218868437227405314’ to ‘2’ [-Werror=overflow]
         89 | #define KVM_PFN_ERR_RO_FAULT (KVM_PFN_ERR_MASK + 2)
            |                              ^
      virt/kvm/kvm_main.c:1935:9: note: in expansion of macro ‘KVM_PFN_ERR_RO_FAULT’
      
      Cc: stable@vger.kernel.org
      Fixes: add6a0cd ("KVM: MMU: try to fix up page faults before giving up")
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Message-Id: <20210208201940.1258328-1-seanjc@google.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      a9545779
    • Paolo Bonzini's avatar
      mm: provide a saner PTE walking API for modules · 9fd6dad1
      Paolo Bonzini authored
      Currently, the follow_pfn function is exported for modules but
      follow_pte is not.  However, follow_pfn is very easy to misuse,
      because it does not provide protections (so most of its callers
      assume the page is writable!) and because it returns after having
      already unlocked the page table lock.
      
      Provide instead a simplified version of follow_pte that does
      not have the pmdpp and range arguments.  The older version
      survives as follow_invalidate_pte() for use by fs/dax.c.
      Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      9fd6dad1
  2. 08 Feb, 2021 2 commits
  3. 04 Feb, 2021 34 commits