KVM: nSVM: Check that DR6[63:32] and DR7[64:32] are not set on vmrun of nested guests
authorKrish Sadhukhan <krish.sadhukhan@oracle.com>
Fri, 22 May 2020 22:19:52 +0000 (18:19 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Jul 2020 20:21:41 +0000 (16:21 -0400)
According to section "Canonicalization and Consistency Checks" in APM vol. 2
the following guest state is illegal:

    "DR6[63:32] are not zero."
    "DR7[63:32] are not zero."
    "Any MBZ bit of EFER is set."

Signed-off-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
Message-Id: <20200522221954.32131-3-krish.sadhukhan@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm/nested.c

index 6bceafb..e4ef980 100644 (file)
@@ -231,6 +231,9 @@ static bool nested_vmcb_checks(struct vmcb *vmcb)
            (vmcb->save.cr0 & X86_CR0_NW))
                return false;
 
+       if (!kvm_dr6_valid(vmcb->save.dr6) || !kvm_dr7_valid(vmcb->save.dr7))
+               return false;
+
        return nested_vmcb_check_controls(&vmcb->control);
 }