]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: SEV: Use the size of the PSC header as the minimum size for PSC requests
authorSean Christopherson <seanjc@google.com>
Fri, 1 May 2026 20:22:30 +0000 (13:22 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 29 May 2026 18:25:28 +0000 (20:25 +0200)
When handling a Page State Change (PSC) #VMGEXIT use the size of the PSC
header as the minimum size for the scratch area.  Per the GHCB spec, PSC
requests do NOT provide the length, i.e. using control->exit_info_2 for the
length is completely made up behavior.  The existing code "works", e.g.
even though Linux-as-a-guest always passes '0', because KVM doesn't do
anything with the length when the request is in the GHCB's shared buffer.

Use the header as the min length.  Once the header is retrieved, KVM can
use the specified indices to compute the full size of the request.

Fixes: 9b54e248d264 ("KVM: SEV: Add support to handle Page State Change VMGEXIT")
Cc: stable@vger.kernel.org
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Michael Roth <michael.roth@amd.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-ID: <20260501202250.2115252-6-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm/sev.c

index 52703c9548568c54e268abd1a1979ff9f51d58be..cbb3040e07782c8c09328b3f831a939218fb46fc 100644 (file)
@@ -4559,7 +4559,7 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
                vcpu->run->system_event.data[0] = control->ghcb_gpa;
                break;
        case SVM_VMGEXIT_PSC:
-               ret = setup_vmgexit_scratch(svm, true, control->exit_info_2);
+               ret = setup_vmgexit_scratch(svm, true, sizeof(struct psc_hdr));
                if (ret)
                        break;