44 lines
1.5 KiB
Diff
44 lines
1.5 KiB
Diff
|
|
From b74c6b8971610ffc9c901a9b22c92b40084a74bf Mon Sep 17 00:00:00 2001
|
||
|
|
From: hanliyang <hanliyang@hygon.cn>
|
||
|
|
Date: Sun, 29 Sep 2024 15:03:47 +0800
|
||
|
|
Subject: [PATCH] target/i386: csv: Support inject secret for CSV3 guest only
|
||
|
|
if the extension is enabled
|
||
|
|
|
||
|
|
The CSV3 guest can only inject secrets when the
|
||
|
|
KVM_CAP_HYGON_COCO_EXT_CSV3_INJ_SECRET capability is enabled.
|
||
|
|
|
||
|
|
Additionally, if the guest is a CSV3 guest, the guest_uaddr field of the
|
||
|
|
KVM ioctl's input should be set to the value of the GPA.
|
||
|
|
|
||
|
|
Signed-off-by: hanliyang <hanliyang@hygon.cn>
|
||
|
|
---
|
||
|
|
target/i386/sev.c | 12 +++++++++++-
|
||
|
|
1 file changed, 11 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/target/i386/sev.c b/target/i386/sev.c
|
||
|
|
index 3a9c9ceec7..b4b42fd716 100644
|
||
|
|
--- a/target/i386/sev.c
|
||
|
|
+++ b/target/i386/sev.c
|
||
|
|
@@ -1416,7 +1416,17 @@ int sev_inject_launch_secret(const char *packet_hdr, const char *secret,
|
||
|
|
input.trans_uaddr = (uint64_t)(unsigned long)data;
|
||
|
|
input.trans_len = data_sz;
|
||
|
|
|
||
|
|
- input.guest_uaddr = (uint64_t)(unsigned long)hva;
|
||
|
|
+ /* For Hygon CSV3 guest, the guest_uaddr should be the gpa */
|
||
|
|
+ if (csv3_enabled()) {
|
||
|
|
+ if (kvm_hygon_coco_ext_inuse & KVM_CAP_HYGON_COCO_EXT_CSV3_INJ_SECRET) {
|
||
|
|
+ input.guest_uaddr = gpa;
|
||
|
|
+ } else {
|
||
|
|
+ error_setg(errp, "CSV3 inject secret unsupported!");
|
||
|
|
+ return 1;
|
||
|
|
+ }
|
||
|
|
+ } else {
|
||
|
|
+ input.guest_uaddr = (uint64_t)(unsigned long)hva;
|
||
|
|
+ }
|
||
|
|
input.guest_len = data_sz;
|
||
|
|
|
||
|
|
trace_kvm_sev_launch_secret(gpa, input.guest_uaddr,
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|