• Sean Christopherson's avatar
    KVM: nVMX: Account for KVM reserved CR4 bits in consistency checks · ca58f3aa
    Sean Christopherson authored
    Check that the guest (L2) and host (L1) CR4 values that would be loaded
    by nested VM-Enter and VM-Exit respectively are valid with respect to
    KVM's (L0 host) allowed CR4 bits.  Failure to check KVM reserved bits
    would allow L1 to load an illegal CR4 (or trigger hardware VM-Fail or
    failed VM-Entry) by massaging guest CPUID to allow features that are not
    supported by KVM.  Amusingly, KVM itself is an accomplice in its doom, as
    KVM adjusts L1's MSR_IA32_VMX_CR4_FIXED1 to allow L1 to enable bits for
    L2 based on L1's CPUID model.
    
    Note, although nested_{guest,host}_cr4_valid() are _currently_ used if
    and only if the vCPU is post-VMXON (nested.vmxon == true), that may not
    be true in the future, e.g. emulating VMXON has a bug where it doesn't
    check the allowed/required CR0/CR4 bits.
    
    Cc: stable@vger.kernel.org
    Fixes: 3899152c
    
     ("KVM: nVMX: fix checks on CR{0,4} during virtual VMX operation")
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20220607213604.3346000-3-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    ca58f3aa
nested.h 8.8 KB