• Sean Christopherson's avatar
    KVM: Disallow user memslot with size that exceeds "unsigned long" · 6b285a55
    Sean Christopherson authored
    Reject userspace memslots whose size exceeds the storage capacity of an
    "unsigned long".  KVM's uAPI takes the size as u64 to support large slots
    on 64-bit hosts, but does not account for the size being truncated on
    32-bit hosts in various flows.  The access_ok() check on the userspace
    virtual address in particular casts the size to "unsigned long" and will
    check the wrong number of bytes.
    
    KVM doesn't actually support slots whose size doesn't fit in an "unsigned
    long", e.g. KVM's internal kvm_memory_slot.npages is an "unsigned long",
    not a "u64", and misc arch specific code follows that behavior.
    
    Fixes: fa3d315a ("KVM: Validate userspace_addr of memslot when registered")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Reviewed-by: default avatarMaciej S. Szmigiero <maciej.szmigiero@oracle.com>
    Message-Id: <20211104002531.1176691-3-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    6b285a55
kvm_main.c 139 KB