summaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorBorislav Petkov (AMD) <bp@alien8.de>2023-02-15 11:39:41 +0100
committerBorislav Petkov (AMD) <bp@alien8.de>2023-03-13 11:27:10 +0100
commit970ab823743fb54b42002ec76c51481f67436444 (patch)
tree320aa2eae62a9e750a525f464871e375d0154099 /arch/x86
parentd6fd48eff7506bb866a54e40369df8899f2078a9 (diff)
downloadlinux-stable-970ab823743fb54b42002ec76c51481f67436444.tar.gz
linux-stable-970ab823743fb54b42002ec76c51481f67436444.tar.bz2
linux-stable-970ab823743fb54b42002ec76c51481f67436444.zip
virt/coco/sev-guest: Simplify extended guest request handling
Return a specific error code - -ENOSPC - to signal the too small cert data buffer instead of checking exit code and exitinfo2. While at it, hoist the *fw_err assignment in snp_issue_guest_request() so that a proper error value is returned to the callers. [ Tom: check override_err instead of err. ] Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20230307192449.24732-4-bp@alien8.de
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kernel/sev.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c
index c644c34372e8..6a3e1425ba17 100644
--- a/arch/x86/kernel/sev.c
+++ b/arch/x86/kernel/sev.c
@@ -2209,15 +2209,16 @@ int snp_issue_guest_request(u64 exit_code, struct snp_req_data *input, unsigned
if (ret)
goto e_put;
+ *fw_err = ghcb->save.sw_exit_info_2;
if (ghcb->save.sw_exit_info_2) {
/* Number of expected pages are returned in RBX */
if (exit_code == SVM_VMGEXIT_EXT_GUEST_REQUEST &&
- ghcb->save.sw_exit_info_2 == SNP_GUEST_REQ_INVALID_LEN)
+ ghcb->save.sw_exit_info_2 == SNP_GUEST_REQ_INVALID_LEN) {
input->data_npages = ghcb_get_rbx(ghcb);
-
- *fw_err = ghcb->save.sw_exit_info_2;
-
- ret = -EIO;
+ ret = -ENOSPC;
+ } else {
+ ret = -EIO;
+ }
}
e_put: