• Sean Christopherson's avatar
    KVM: nVMX: Ensure 64-bit shift when checking VMFUNC bitmap · 0e75225d
    Sean Christopherson authored
    Use BIT_ULL() instead of an open-coded shift to check whether or not a
    function is enabled in L1's VMFUNC bitmap.  This is a benign bug as KVM
    supports only bit 0, and will fail VM-Enter if any other bits are set,
    i.e. bits 63:32 are guaranteed to be zero.
    
    Note, "function" is bounded by hardware as VMFUNC will #UD before taking
    a VM-Exit if the function is greater than 63.
    
    Before:
      if ((vmcs12->vm_function_control & (1 << function)) == 0)
       0x000000000001a916 <+118>:	mov    $0x1,%eax
       0x000000000001a91b <+123>:	shl    %cl,%eax
       0x000000000001a91d <+125>:	cltq
       0x000000000001a91f <+127>:	and    0x128(%rbx),%rax
    
    After:
      if (!(vmcs12->vm_function_control & BIT_ULL(function & 63)))
       0x000000000001a955 <+117>:	mov    0x128(%rbx),%rdx
       0x000000000001a95c <+124>:	bt     %rax,%rdx
    
    Fixes: 27c42a1b ("KVM: nVMX: Enable VMFUNC for the L1 hypervisor")
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20210609234235.1244004-3-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    0e75225d
nested.c 206 KB