• John Hubbard's avatar
    KVM: SVM: fix svn_pin_memory()'s use of get_user_pages_fast() · 78824fab
    John Hubbard authored
    There are two problems in svn_pin_memory():
    
    1) The return value of get_user_pages_fast() is stored in an
    unsigned long, although the declared return value is of type int.
    This will not cause any symptoms, but it is misleading.
    Fix this by changing the type of npinned to "int".
    
    2) The number of pages passed into get_user_pages_fast() is stored
    in an unsigned long, even though get_user_pages_fast() accepts an
    int. This means that it is possible to silently overflow the number
    of pages.
    
    Fix this by adding a WARN_ON_ONCE() and an early error return. The
    npages variable is left as an unsigned long for convenience in
    checking for overflow.
    
    Fixes: 89c50580 ("KVM: SVM: Add support for KVM_SEV_LAUNCH_UPDATE_DATA command")
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Sean Christopherson <sean.j.christopherson@intel.com>
    Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
    Cc: Wanpeng Li <wanpengli@tencent.com>
    Cc: Jim Mattson <jmattson@google.com>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: x86@kernel.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
    Message-Id: <20200526062207.1360225-2-jhubbard@nvidia.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    78824fab
sev.c 26.3 KB