• Sean Christopherson's avatar
    KVM: x86: Take a u64 when checking for a valid dr7 value · 9b5e8532
    Sean Christopherson authored
    Take a u64 instead of an unsigned long in kvm_dr7_valid() to fix a build
    warning on i386 due to right-shifting a 32-bit value by 32 when checking
    for bits being set in dr7[63:32].
    
    Alternatively, the warning could be resolved by rewriting the check to
    use an i386-friendly method, but taking a u64 fixes another oddity on
    32-bit KVM.  Beause KVM implements natural width VMCS fields as u64s to
    avoid layout issues between 32-bit and 64-bit, a devious guest can stuff
    vmcs12->guest_dr7 with a 64-bit value even when both the guest and host
    are 32-bit kernels.  KVM eventually drops vmcs12->guest_dr7[63:32] when
    propagating vmcs12->guest_dr7 to vmcs02, but ideally KVM would not rely
    on that behavior for correctness.
    
    Cc: Jim Mattson <jmattson@google.com>
    Cc: Krish Sadhukhan <krish.sadhukhan@oracle.com>
    Fixes: ecb697d10f70 ("KVM: nVMX: Check GUEST_DR7 on vmentry of nested guests")
    Reported-by: default avatarRandy Dunlap <rdunlap@infradead.org>
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    9b5e8532
x86.h 9.04 KB