Regression test for ae20eef5 ("KVM: SVM: Update SEV-ES shutdown intercepts
with more metadata"). Test confirms userspace is correctly indicated of
a guest shutdown not previous behavior of an EINVAL from KVM_RUN.

Cc: Paolo Bonzini <[email protected]>
Cc: Sean Christopherson <[email protected]>
Cc: Alper Gun <[email protected]>
Cc: Tom Lendacky <[email protected]>
Cc: Michael Roth <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Peter Gonda <[email protected]>

---
 .../selftests/kvm/x86_64/sev_smoke_test.c     | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/tools/testing/selftests/kvm/x86_64/sev_smoke_test.c 
b/tools/testing/selftests/kvm/x86_64/sev_smoke_test.c
index 7c70c0da4fb74..04f24d5f09877 100644
--- a/tools/testing/selftests/kvm/x86_64/sev_smoke_test.c
+++ b/tools/testing/selftests/kvm/x86_64/sev_smoke_test.c
@@ -160,6 +160,30 @@ static void test_sev(void *guest_code, uint64_t policy)
        kvm_vm_free(vm);
 }
 
+static void guest_shutdown_code(void)
+{
+       __asm__ __volatile__("ud2");
+}
+
+static void test_sev_es_shutdown(void)
+{
+       struct kvm_vcpu *vcpu;
+       struct kvm_vm *vm;
+
+       uint32_t type = KVM_X86_SEV_ES_VM;
+
+       vm = vm_sev_create_with_one_vcpu(type, guest_shutdown_code, &vcpu);
+
+       vm_sev_launch(vm, SEV_POLICY_ES, NULL);
+
+       vcpu_run(vcpu);
+       TEST_ASSERT(vcpu->run->exit_reason == KVM_EXIT_SHUTDOWN,
+                   "Wanted SHUTDOWN, got %s",
+                   exit_reason_str(vcpu->run->exit_reason));
+
+       kvm_vm_free(vm);
+}
+
 int main(int argc, char *argv[])
 {
        TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_SEV));
@@ -171,6 +195,8 @@ int main(int argc, char *argv[])
                test_sev(guest_sev_es_code, SEV_POLICY_ES | SEV_POLICY_NO_DBG);
                test_sev(guest_sev_es_code, SEV_POLICY_ES);
 
+               test_sev_es_shutdown();
+
                if (kvm_has_cap(KVM_CAP_XCRS) &&
                    (xgetbv(0) & XFEATURE_MASK_X87_AVX) == 
XFEATURE_MASK_X87_AVX) {
                        test_sync_vmsa(0);
-- 
2.45.2.803.g4e1b14247a-goog


Reply via email to