]> exis.tech > repos - linux.git/commitdiff
KVM: selftests: sev_smoke_test: Only run VM types the host offers
authorDavid Woodhouse <dwmw@amazon.co.uk>
Mon, 20 Jul 2026 11:03:02 +0000 (12:03 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 21 Jul 2026 10:25:26 +0000 (12:25 +0200)
sev_smoke_test ran the plain SEV subtest unconditionally, gated only on
the X86_FEATURE_SEV CPUID bit, while gating SEV-ES and SNP on the
KVM_CAP_VM_TYPES bits.  CPUID reporting SEV does not mean KVM offers the
SEV VM type: when all SEV ASIDs are assigned to SEV-SNP, KVM_X86_SEV_VM
is unavailable even though X86_FEATURE_SEV is set.  On such a host the
test aborts in KVM_CREATE_VM instead of exercising the available modes.

Gate the SEV subtest on KVM_CAP_VM_TYPES like the others, so the test
runs the VM types the host actually offers.

Reviewed-by: Tycho Andersen (AMD) <tycho@kernel.org>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Message-ID: <2b5e7a83d277134294199a455469bb436196b902.1784545391.git.dwmw@amazon.co.uk>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/x86/sev_smoke_test.c

index 6b2cbe2a90b7c559857f9c9b6d8fca9db79bbc2e..bf27b6187afac1ac17b920aa662fb8e709817302 100644 (file)
@@ -247,7 +247,14 @@ int main(int argc, char *argv[])
 {
        TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_SEV));
 
-       test_sev_smoke(guest_sev_code, KVM_X86_SEV_VM, 0);
+       /*
+        * Only exercise VM types the host actually offers.  CPUID reporting
+        * SEV does not guarantee KVM offers the SEV VM type: when all SEV
+        * ASIDs are assigned to SEV-SNP, KVM_X86_SEV_VM is unavailable even
+        * though X86_FEATURE_SEV is set.  Gate every type on KVM_CAP_VM_TYPES.
+        */
+       if (kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SEV_VM))
+               test_sev_smoke(guest_sev_code, KVM_X86_SEV_VM, 0);
 
        if (kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(KVM_X86_SEV_ES_VM))
                test_sev_smoke(guest_sev_es_code, KVM_X86_SEV_ES_VM, SEV_POLICY_ES);