]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: SVM: Initialize vmsa_pa in VMCB to INVALID_PAGE if VMSA page is NULL
authorSean Christopherson <seanjc@google.com>
Mon, 2 Jun 2025 22:44:59 +0000 (15:44 -0700)
committerSean Christopherson <seanjc@google.com>
Tue, 24 Jun 2025 19:20:15 +0000 (12:20 -0700)
When creating an SEV-ES vCPU for intra-host migration, set its vmsa_pa to
INVALID_PAGE to harden against doing VMRUN with a bogus VMSA (KVM checks
for a valid VMSA page in pre_sev_run()).

Cc: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Liam Merwick <liam.merwick@oracle.com>
Tested-by: Liam Merwick <liam.merwick@oracle.com>
Link: https://lore.kernel.org/r/20250602224459.41505-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/svm/sev.c

index 65d1597c3feda2cc32e6541dc3fc401dd1fbe1a1..b201f77fcd49b7cb197e60f2c6f4ccf203f2d6c6 100644 (file)
@@ -4449,8 +4449,12 @@ static void sev_es_init_vmcb(struct vcpu_svm *svm)
         * the VMSA will be NULL if this vCPU is the destination for intrahost
         * migration, and will be copied later.
         */
-       if (svm->sev_es.vmsa && !svm->sev_es.snp_has_guest_vmsa)
-               svm->vmcb->control.vmsa_pa = __pa(svm->sev_es.vmsa);
+       if (!svm->sev_es.snp_has_guest_vmsa) {
+               if (svm->sev_es.vmsa)
+                       svm->vmcb->control.vmsa_pa = __pa(svm->sev_es.vmsa);
+               else
+                       svm->vmcb->control.vmsa_pa = INVALID_PAGE;
+       }
 
        if (cpu_feature_enabled(X86_FEATURE_ALLOWED_SEV_FEATURES))
                svm->vmcb->control.allowed_sev_features = sev->vmsa_features |