KVM: selftests: Provide valid inputs for MONITOR/MWAIT regs
authorSean Christopherson <seanjc@google.com>
Mon, 11 Jul 2022 22:57:52 +0000 (22:57 +0000)
committerSean Christopherson <seanjc@google.com>
Tue, 12 Jul 2022 22:31:14 +0000 (22:31 +0000)
Provide valid inputs for RAX, RCX, and RDX when testing whether or not
KVM injects a #UD on MONITOR/MWAIT.  SVM has a virtualization hole and
checks for _all_ faults before checking for intercepts, e.g. MONITOR with
an unsupported RCX will #GP before KVM gets a chance to intercept and
emulate.

Fixes: 2325d4dd7321 ("KVM: selftests: Add MONITOR/MWAIT quirk test")
Signed-off-by: Sean Christopherson <seanjc@google.com>
Link: https://lore.kernel.org/r/20220711225753.1073989-3-seanjc@google.com
tools/testing/selftests/kvm/x86_64/monitor_mwait_test.c

index f5c09cb528ae73fc3a5b132dc51af56c039e0dc4..6a4ebcdfa374c507624da30bf7b016bcbf6cff80 100644 (file)
@@ -28,13 +28,17 @@ static void guest_monitor_wait(int testcase)
 
        GUEST_SYNC(testcase);
 
-       vector = kvm_asm_safe("monitor");
+       /*
+        * Arbitrarily MONITOR this function, SVM performs fault checks before
+        * intercept checks, so the inputs for MONITOR and MWAIT must be valid.
+        */
+       vector = kvm_asm_safe("monitor", "a"(guest_monitor_wait), "c"(0), "d"(0));
        if (fault_wanted)
                GUEST_ASSERT_2(vector == UD_VECTOR, testcase, vector);
        else
                GUEST_ASSERT_2(!vector, testcase, vector);
 
-       vector = kvm_asm_safe("mwait");
+       vector = kvm_asm_safe("mwait", "a"(guest_monitor_wait), "c"(0), "d"(0));
        if (fault_wanted)
                GUEST_ASSERT_2(vector == UD_VECTOR, testcase, vector);
        else