KVM: selftests: enlightened VMPTRLD with an incorrect GPA
authorVitaly Kuznetsov <vkuznets@redhat.com>
Mon, 9 Mar 2020 15:52:16 +0000 (16:52 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 16 Mar 2020 17:19:32 +0000 (18:19 +0100)
Check that guest doesn't hang when an invalid eVMCS GPA is specified.
Testing that #UD is injected would probably be better but selftests lack
the infrastructure currently.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/x86_64/evmcs_test.c

index 17da579..e6e62e5 100644 (file)
@@ -72,6 +72,10 @@ void guest_code(struct vmx_pages *vmx_pages)
                l1_guest_code(vmx_pages);
 
        GUEST_DONE();
+
+       /* Try enlightened vmptrld with an incorrect GPA */
+       evmcs_vmptrld(0xdeadbeef, vmx_pages->enlightened_vmcs);
+       GUEST_ASSERT(vmlaunch());
 }
 
 int main(int argc, char *argv[])
@@ -120,7 +124,7 @@ int main(int argc, char *argv[])
                case UCALL_SYNC:
                        break;
                case UCALL_DONE:
-                       goto done;
+                       goto part1_done;
                default:
                        TEST_FAIL("Unknown ucall %lu", uc.cmd);
                }
@@ -152,6 +156,10 @@ int main(int argc, char *argv[])
                            (ulong) regs2.rdi, (ulong) regs2.rsi);
        }
 
-done:
+part1_done:
+       _vcpu_run(vm, VCPU_ID);
+       TEST_ASSERT(run->exit_reason == KVM_EXIT_SHUTDOWN,
+                   "Unexpected successful VMEnter with invalid eVMCS pointer!");
+
        kvm_vm_free(vm);
 }