This is a note to let you know that I've just added the patch titled virt/coco/sev-guest: Carve out the request issuing logic into a helper to the 6.2-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: virt-coco-sev-guest-carve-out-the-request-issuing-logic-into-a-helper.patch and it can be found in the queue-6.2 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 0fdb6cc7c89cb5e0cbc45dbdbafb8e3fb92ddc95 Mon Sep 17 00:00:00 2001 From: "Borislav Petkov (AMD)" <bp@xxxxxxxxx> Date: Tue, 7 Mar 2023 09:19:19 -0600 Subject: virt/coco/sev-guest: Carve out the request issuing logic into a helper From: Borislav Petkov (AMD) <bp@xxxxxxxxx> commit 0fdb6cc7c89cb5e0cbc45dbdbafb8e3fb92ddc95 upstream. This makes the code flow a lot easier to follow. No functional changes. [ Tom: touchups. ] Signed-off-by: Borislav Petkov (AMD) <bp@xxxxxxxxx> Signed-off-by: Tom Lendacky <thomas.lendacky@xxxxxxx> Signed-off-by: Borislav Petkov (AMD) <bp@xxxxxxxxx> Link: https://lore.kernel.org/r/20230307192449.24732-6-bp@xxxxxxxxx Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/virt/coco/sev-guest/sev-guest.c | 44 +++++++++++++++++++------------- 1 file changed, 27 insertions(+), 17 deletions(-) --- a/drivers/virt/coco/sev-guest/sev-guest.c +++ b/drivers/virt/coco/sev-guest/sev-guest.c @@ -318,27 +318,12 @@ static int enc_payload(struct snp_guest_ return __enc_payload(snp_dev, req, payload, sz); } -static int handle_guest_request(struct snp_guest_dev *snp_dev, u64 exit_code, int msg_ver, - u8 type, void *req_buf, size_t req_sz, void *resp_buf, - u32 resp_sz, __u64 *fw_err) +static int __handle_guest_request(struct snp_guest_dev *snp_dev, u64 exit_code, __u64 *fw_err) { unsigned long err, override_err = 0; unsigned int override_npages = 0; - u64 seqno; int rc; - /* Get message sequence and verify that its a non-zero */ - seqno = snp_get_msg_seqno(snp_dev); - if (!seqno) - return -EIO; - - memset(snp_dev->response, 0, sizeof(struct snp_guest_msg)); - - /* Encrypt the userspace provided payload */ - rc = enc_payload(snp_dev, seqno, msg_ver, type, req_buf, req_sz); - if (rc) - return rc; - retry_request: /* * Call firmware to process the request. In this function the encrypted @@ -347,7 +332,6 @@ retry_request: * prevent reuse of the IV. */ rc = snp_issue_guest_request(exit_code, &snp_dev->input, &err); - switch (rc) { case -ENOSPC: /* @@ -401,7 +385,33 @@ retry_request: if (!rc && override_err == SNP_GUEST_REQ_INVALID_LEN) return -EIO; + return rc; +} + +static int handle_guest_request(struct snp_guest_dev *snp_dev, u64 exit_code, int msg_ver, + u8 type, void *req_buf, size_t req_sz, void *resp_buf, + u32 resp_sz, __u64 *fw_err) +{ + u64 seqno; + int rc; + + /* Get message sequence and verify that its a non-zero */ + seqno = snp_get_msg_seqno(snp_dev); + if (!seqno) + return -EIO; + + memset(snp_dev->response, 0, sizeof(struct snp_guest_msg)); + + /* Encrypt the userspace provided payload */ + rc = enc_payload(snp_dev, seqno, msg_ver, type, req_buf, req_sz); + if (rc) + return rc; + + rc = __handle_guest_request(snp_dev, exit_code, fw_err); if (rc) { + if (rc == -EIO && *fw_err == SNP_GUEST_REQ_INVALID_LEN) + return rc; + dev_alert(snp_dev->dev, "Detected error from ASP request. rc: %d, fw_err: %llu\n", rc, *fw_err); Patches currently in stable-queue which might be from bp@xxxxxxxxx are queue-6.2/virt-coco-sev-guest-do-some-code-style-cleanups.patch queue-6.2/virt-coco-sev-guest-add-throttling-awareness.patch queue-6.2/virt-coco-sev-guest-simplify-extended-guest-request-handling.patch queue-6.2/x86-mm-fix-use-of-uninitialized-buffer-in-sme_enable.patch queue-6.2/ftrace-kcfi-define-ftrace_stub_graph-conditionally.patch queue-6.2/x86-mce-make-sure-logged-mces-are-processed-after-sysfs-update.patch queue-6.2/virt-coco-sev-guest-convert-the-sw_exit_info_2-checking-to-a-switch-case.patch queue-6.2/virt-coco-sev-guest-remove-the-disable_vmpck-label-in-handle_guest_request.patch queue-6.2/virt-coco-sev-guest-carve-out-the-request-issuing-logic-into-a-helper.patch queue-6.2/virt-coco-sev-guest-check-sev_snp-attribute-at-probe-time.patch