* [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
@ 2026-01-28 19:49 Thomas Courrege
2026-01-28 19:49 ` [PATCH v6 1/1] " Thomas Courrege
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Thomas Courrege @ 2026-01-28 19:49 UTC (permalink / raw)
To: ashish.kalra, corbet, herbert, john.allen, nikunj, pbonzini,
seanjc, thomas.lendacky
Cc: kvm, linux-crypto, linux-kernel, x86, Thomas Courrege
Overview
--------
The SEV-SNP Firmware ABI allows the hypervisor to request an
attestation report via the SEV_CMD_SNP_HV_REPORT_REQ firmware command.
Testing
-------
For testing this via QEMU, please use the following tree:
https://github.com/Th0rOnDoR/qemu
Patch History
-------------
v5 -> v6:
Fix typos issues in documentation
v4 -> v5:
Set variables in reverse christmas tree order
Fix and clean the rsp_size logic
v3 -> v4:
Add newline in documentation to avoid a warning
Add base commit
v2 -> v3:
Add padding to structure, code format
Write back the full MSG_REPORT_RSP structure
Remove the memzero_explicit for the report
v1 -> v2:
Renaming, code format
Zeroes the report before returning
Any feedback is appreciated.
Thanks,
Thomas
Thomas Courrege (1):
KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
.../virt/kvm/x86/amd-memory-encryption.rst | 28 +++++++++
arch/x86/include/uapi/asm/kvm.h | 9 +++
arch/x86/kvm/svm/sev.c | 63 +++++++++++++++++++
drivers/crypto/ccp/sev-dev.c | 1 +
include/linux/psp-sev.h | 31 +++++++++
5 files changed, 132 insertions(+)
base-commit: e89f0e9a0a007e8c3afb8ecd739c0b3255422b00
--
2.52.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v6 1/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
2026-01-28 19:49 [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command Thomas Courrege
@ 2026-01-28 19:49 ` Thomas Courrege
2026-01-28 20:35 ` Tom Lendacky
2026-01-28 20:34 ` [PATCH v6 0/1] " Tom Lendacky
2026-01-29 10:35 ` Thomas Courrege
2 siblings, 1 reply; 7+ messages in thread
From: Thomas Courrege @ 2026-01-28 19:49 UTC (permalink / raw)
To: ashish.kalra, corbet, herbert, john.allen, nikunj, pbonzini,
seanjc, thomas.lendacky
Cc: kvm, linux-crypto, linux-kernel, x86, Thomas Courrege
Add support for retrieving the SEV-SNP attestation report via the
SNP_HV_REPORT_REQ firmware command and expose it through a new KVM
ioctl for SNP guests.
Signed-off-by: Thomas Courrege <thomas.courrege@thorondor.fr>
---
.../virt/kvm/x86/amd-memory-encryption.rst | 28 +++++++++
arch/x86/include/uapi/asm/kvm.h | 9 +++
arch/x86/kvm/svm/sev.c | 63 +++++++++++++++++++
drivers/crypto/ccp/sev-dev.c | 1 +
include/linux/psp-sev.h | 31 +++++++++
5 files changed, 132 insertions(+)
diff --git a/Documentation/virt/kvm/x86/amd-memory-encryption.rst b/Documentation/virt/kvm/x86/amd-memory-encryption.rst
index 1ddb6a86ce7f..46fc07d9942a 100644
--- a/Documentation/virt/kvm/x86/amd-memory-encryption.rst
+++ b/Documentation/virt/kvm/x86/amd-memory-encryption.rst
@@ -572,6 +572,34 @@ Returns: 0 on success, -negative on error
See SNP_LAUNCH_FINISH in the SEV-SNP specification [snp-fw-abi]_ for further
details on the input parameters in ``struct kvm_sev_snp_launch_finish``.
+21. KVM_SEV_SNP_HV_REPORT_REQ
+-----------------------------
+
+The KVM_SEV_SNP_HV_REPORT_REQ command requests a hypervisor-generated
+SNP guest attestation report. This report is produced by the SEV firmware
+using the key selected by the caller.
+
+The ``key_sel`` field indicates which key the platform will use to sign the
+report:
+ * ``0``: If VLEK is installed, sign with VLEK. Otherwise, sign with VCEK.
+ * ``1``: Sign with VCEK.
+ * ``2``: Sign with VLEK.
+ * Other values are reserved.
+
+Parameters (in): struct kvm_sev_snp_hv_report_req
+
+Returns: 0 on success, -negative on error
+
+::
+ struct kvm_sev_snp_hv_report_req {
+ __u64 report_uaddr;
+ __u64 report_len;
+ __u8 key_sel;
+ __u8 pad0[7];
+ __u64 pad1[4];
+ };
+
+
Device attribute API
====================
diff --git a/arch/x86/include/uapi/asm/kvm.h b/arch/x86/include/uapi/asm/kvm.h
index 7ceff6583652..464146bed784 100644
--- a/arch/x86/include/uapi/asm/kvm.h
+++ b/arch/x86/include/uapi/asm/kvm.h
@@ -743,6 +743,7 @@ enum sev_cmd_id {
KVM_SEV_SNP_LAUNCH_START = 100,
KVM_SEV_SNP_LAUNCH_UPDATE,
KVM_SEV_SNP_LAUNCH_FINISH,
+ KVM_SEV_SNP_HV_REPORT_REQ,
KVM_SEV_NR_MAX,
};
@@ -871,6 +872,14 @@ struct kvm_sev_receive_update_data {
__u32 pad2;
};
+struct kvm_sev_snp_hv_report_req {
+ __u64 report_uaddr;
+ __u64 report_len;
+ __u8 key_sel;
+ __u8 pad0[7];
+ __u64 pad1[4];
+};
+
struct kvm_sev_snp_launch_start {
__u64 policy;
__u8 gosvw[16];
diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
index f59c65abe3cf..63026d254ab1 100644
--- a/arch/x86/kvm/svm/sev.c
+++ b/arch/x86/kvm/svm/sev.c
@@ -2261,6 +2261,66 @@ static int snp_launch_start(struct kvm *kvm, struct kvm_sev_cmd *argp)
return rc;
}
+static int sev_snp_hv_report_request(struct kvm *kvm, struct kvm_sev_cmd *argp)
+{
+ struct kvm_sev_info *sev = to_kvm_sev_info(kvm);
+ struct sev_data_snp_msg_report_rsp *report_rsp;
+ struct kvm_sev_snp_hv_report_req params;
+ struct sev_data_snp_hv_report_req data;
+ size_t rsp_size = sizeof(*report_rsp);
+ void __user *u_report;
+ void __user *u_params;
+ int ret;
+
+ if (!sev_snp_guest(kvm))
+ return -ENOTTY;
+
+ u_params = u64_to_user_ptr(argp->data);
+ if (copy_from_user(¶ms, u_params, sizeof(params)))
+ return -EFAULT;
+
+ if (params.report_len < rsp_size)
+ return -ENOSPC;
+
+ u_report = u64_to_user_ptr(params.report_uaddr);
+ if (!u_report)
+ return -EINVAL;
+
+ report_rsp = snp_alloc_firmware_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO);
+ if (!report_rsp)
+ return -ENOMEM;
+
+ data.len = sizeof(data);
+ data.key_sel = params.key_sel;
+ data.gctx_addr = __psp_pa(sev->snp_context);
+ data.hv_report_paddr = __psp_pa(report_rsp);
+ data.rsvd = 0;
+
+ ret = sev_issue_cmd(kvm, SEV_CMD_SNP_HV_REPORT_REQ, &data,
+ &argp->error);
+ if (ret)
+ goto e_free_rsp;
+
+ if (!report_rsp->status) {
+ if (params.report_len < (rsp_size + report_rsp->report_size))
+ ret = -ENOSPC;
+ else
+ rsp_size += report_rsp->report_size;
+
+ params.report_len = sizeof(*report_rsp) + report_rsp->report_size;
+ }
+
+ if (copy_to_user(u_report, report_rsp, rsp_size))
+ ret = -EFAULT;
+
+ if (copy_to_user(u_params, ¶ms, sizeof(params)))
+ ret = -EFAULT;
+
+e_free_rsp:
+ snp_free_firmware_page(report_rsp);
+ return ret;
+}
+
struct sev_gmem_populate_args {
__u8 type;
int sev_fd;
@@ -2672,6 +2732,9 @@ int sev_mem_enc_ioctl(struct kvm *kvm, void __user *argp)
case KVM_SEV_SNP_LAUNCH_FINISH:
r = snp_launch_finish(kvm, &sev_cmd);
break;
+ case KVM_SEV_SNP_HV_REPORT_REQ:
+ r = sev_snp_hv_report_request(kvm, &sev_cmd);
+ break;
default:
r = -EINVAL;
goto out;
diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c
index 956ea609d0cc..5dd7c3f0d50d 100644
--- a/drivers/crypto/ccp/sev-dev.c
+++ b/drivers/crypto/ccp/sev-dev.c
@@ -259,6 +259,7 @@ static int sev_cmd_buffer_len(int cmd)
case SEV_CMD_SNP_COMMIT: return sizeof(struct sev_data_snp_commit);
case SEV_CMD_SNP_FEATURE_INFO: return sizeof(struct sev_data_snp_feature_info);
case SEV_CMD_SNP_VLEK_LOAD: return sizeof(struct sev_user_data_snp_vlek_load);
+ case SEV_CMD_SNP_HV_REPORT_REQ: return sizeof(struct sev_data_snp_hv_report_req);
default: return sev_tio_cmd_buffer_len(cmd);
}
diff --git a/include/linux/psp-sev.h b/include/linux/psp-sev.h
index 69ffa4b4d1fa..c651a400d124 100644
--- a/include/linux/psp-sev.h
+++ b/include/linux/psp-sev.h
@@ -124,6 +124,7 @@ enum sev_cmd {
SEV_CMD_SNP_GCTX_CREATE = 0x093,
SEV_CMD_SNP_GUEST_REQUEST = 0x094,
SEV_CMD_SNP_ACTIVATE_EX = 0x095,
+ SEV_CMD_SNP_HV_REPORT_REQ = 0x096,
SEV_CMD_SNP_LAUNCH_START = 0x0A0,
SEV_CMD_SNP_LAUNCH_UPDATE = 0x0A1,
SEV_CMD_SNP_LAUNCH_FINISH = 0x0A2,
@@ -594,6 +595,36 @@ struct sev_data_attestation_report {
u32 len; /* In/Out */
} __packed;
+/**
+ * struct sev_data_snp_hv_report_req - SNP_HV_REPORT_REQ command params
+ *
+ * @len: length of the command buffer in bytes
+ * @key_sel: Selects which key to use for generating the signature.
+ * @gctx_addr: System physical address of guest context page
+ * @hv_report_paddr: System physical address where MSG_EXPORT_RSP will be written
+ */
+struct sev_data_snp_hv_report_req {
+ u32 len; /* In */
+ u32 key_sel :2, /* In */
+ rsvd :30;
+ u64 gctx_addr; /* In */
+ u64 hv_report_paddr; /* In */
+} __packed;
+
+/**
+ * struct sev_data_snp_msg_export_rsp
+ *
+ * @status: Status : 0h: Success. 16h: Invalid parameters.
+ * @report_size: Size in bytes of the attestation report
+ * @report: attestation report
+ */
+struct sev_data_snp_msg_report_rsp {
+ u32 status; /* Out */
+ u32 report_size; /* Out */
+ u8 rsvd[24];
+ u8 report[];
+} __packed;
+
/**
* struct sev_data_snp_download_firmware - SNP_DOWNLOAD_FIRMWARE command params
*
--
2.52.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
2026-01-28 19:49 [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command Thomas Courrege
2026-01-28 19:49 ` [PATCH v6 1/1] " Thomas Courrege
@ 2026-01-28 20:34 ` Tom Lendacky
2026-01-29 10:35 ` Thomas Courrege
2 siblings, 0 replies; 7+ messages in thread
From: Tom Lendacky @ 2026-01-28 20:34 UTC (permalink / raw)
To: Thomas Courrege, ashish.kalra, corbet, herbert, john.allen,
nikunj, pbonzini, seanjc
Cc: kvm, linux-crypto, linux-kernel, x86
On 1/28/26 13:49, Thomas Courrege wrote:
> Overview
> --------
> The SEV-SNP Firmware ABI allows the hypervisor to request an
> attestation report via the SEV_CMD_SNP_HV_REPORT_REQ firmware command.
The code looks good to me, but you might want to reply to your cover
letter with more of an explanation as to why this is important to
include in KVM.
Thanks,
Tom
>
> Testing
> -------
> For testing this via QEMU, please use the following tree:
> https://github.com/Th0rOnDoR/qemu
>
> Patch History
> -------------
> v5 -> v6:
> Fix typos issues in documentation
>
> v4 -> v5:
> Set variables in reverse christmas tree order
> Fix and clean the rsp_size logic
>
> v3 -> v4:
> Add newline in documentation to avoid a warning
> Add base commit
>
> v2 -> v3:
> Add padding to structure, code format
> Write back the full MSG_REPORT_RSP structure
> Remove the memzero_explicit for the report
>
> v1 -> v2:
> Renaming, code format
> Zeroes the report before returning
>
>
> Any feedback is appreciated.
>
> Thanks,
> Thomas
>
>
> Thomas Courrege (1):
> KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
>
> .../virt/kvm/x86/amd-memory-encryption.rst | 28 +++++++++
> arch/x86/include/uapi/asm/kvm.h | 9 +++
> arch/x86/kvm/svm/sev.c | 63 +++++++++++++++++++
> drivers/crypto/ccp/sev-dev.c | 1 +
> include/linux/psp-sev.h | 31 +++++++++
> 5 files changed, 132 insertions(+)
>
>
> base-commit: e89f0e9a0a007e8c3afb8ecd739c0b3255422b00
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 1/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
2026-01-28 19:49 ` [PATCH v6 1/1] " Thomas Courrege
@ 2026-01-28 20:35 ` Tom Lendacky
0 siblings, 0 replies; 7+ messages in thread
From: Tom Lendacky @ 2026-01-28 20:35 UTC (permalink / raw)
To: Thomas Courrege, ashish.kalra, corbet, herbert, john.allen,
nikunj, pbonzini, seanjc
Cc: kvm, linux-crypto, linux-kernel, x86
On 1/28/26 13:49, Thomas Courrege wrote:
> Add support for retrieving the SEV-SNP attestation report via the
> SNP_HV_REPORT_REQ firmware command and expose it through a new KVM
> ioctl for SNP guests.
>
> Signed-off-by: Thomas Courrege <thomas.courrege@thorondor.fr>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
> ---
> .../virt/kvm/x86/amd-memory-encryption.rst | 28 +++++++++
> arch/x86/include/uapi/asm/kvm.h | 9 +++
> arch/x86/kvm/svm/sev.c | 63 +++++++++++++++++++
> drivers/crypto/ccp/sev-dev.c | 1 +
> include/linux/psp-sev.h | 31 +++++++++
> 5 files changed, 132 insertions(+)
>
> diff --git a/Documentation/virt/kvm/x86/amd-memory-encryption.rst b/Documentation/virt/kvm/x86/amd-memory-encryption.rst
> index 1ddb6a86ce7f..46fc07d9942a 100644
> --- a/Documentation/virt/kvm/x86/amd-memory-encryption.rst
> +++ b/Documentation/virt/kvm/x86/amd-memory-encryption.rst
> @@ -572,6 +572,34 @@ Returns: 0 on success, -negative on error
> See SNP_LAUNCH_FINISH in the SEV-SNP specification [snp-fw-abi]_ for further
> details on the input parameters in ``struct kvm_sev_snp_launch_finish``.
>
> +21. KVM_SEV_SNP_HV_REPORT_REQ
> +-----------------------------
> +
> +The KVM_SEV_SNP_HV_REPORT_REQ command requests a hypervisor-generated
> +SNP guest attestation report. This report is produced by the SEV firmware
> +using the key selected by the caller.
> +
> +The ``key_sel`` field indicates which key the platform will use to sign the
> +report:
> + * ``0``: If VLEK is installed, sign with VLEK. Otherwise, sign with VCEK.
> + * ``1``: Sign with VCEK.
> + * ``2``: Sign with VLEK.
> + * Other values are reserved.
> +
> +Parameters (in): struct kvm_sev_snp_hv_report_req
> +
> +Returns: 0 on success, -negative on error
> +
> +::
> + struct kvm_sev_snp_hv_report_req {
> + __u64 report_uaddr;
> + __u64 report_len;
> + __u8 key_sel;
> + __u8 pad0[7];
> + __u64 pad1[4];
> + };
> +
> +
> Device attribute API
> ====================
>
> diff --git a/arch/x86/include/uapi/asm/kvm.h b/arch/x86/include/uapi/asm/kvm.h
> index 7ceff6583652..464146bed784 100644
> --- a/arch/x86/include/uapi/asm/kvm.h
> +++ b/arch/x86/include/uapi/asm/kvm.h
> @@ -743,6 +743,7 @@ enum sev_cmd_id {
> KVM_SEV_SNP_LAUNCH_START = 100,
> KVM_SEV_SNP_LAUNCH_UPDATE,
> KVM_SEV_SNP_LAUNCH_FINISH,
> + KVM_SEV_SNP_HV_REPORT_REQ,
>
> KVM_SEV_NR_MAX,
> };
> @@ -871,6 +872,14 @@ struct kvm_sev_receive_update_data {
> __u32 pad2;
> };
>
> +struct kvm_sev_snp_hv_report_req {
> + __u64 report_uaddr;
> + __u64 report_len;
> + __u8 key_sel;
> + __u8 pad0[7];
> + __u64 pad1[4];
> +};
> +
> struct kvm_sev_snp_launch_start {
> __u64 policy;
> __u8 gosvw[16];
> diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
> index f59c65abe3cf..63026d254ab1 100644
> --- a/arch/x86/kvm/svm/sev.c
> +++ b/arch/x86/kvm/svm/sev.c
> @@ -2261,6 +2261,66 @@ static int snp_launch_start(struct kvm *kvm, struct kvm_sev_cmd *argp)
> return rc;
> }
>
> +static int sev_snp_hv_report_request(struct kvm *kvm, struct kvm_sev_cmd *argp)
> +{
> + struct kvm_sev_info *sev = to_kvm_sev_info(kvm);
> + struct sev_data_snp_msg_report_rsp *report_rsp;
> + struct kvm_sev_snp_hv_report_req params;
> + struct sev_data_snp_hv_report_req data;
> + size_t rsp_size = sizeof(*report_rsp);
> + void __user *u_report;
> + void __user *u_params;
> + int ret;
> +
> + if (!sev_snp_guest(kvm))
> + return -ENOTTY;
> +
> + u_params = u64_to_user_ptr(argp->data);
> + if (copy_from_user(¶ms, u_params, sizeof(params)))
> + return -EFAULT;
> +
> + if (params.report_len < rsp_size)
> + return -ENOSPC;
> +
> + u_report = u64_to_user_ptr(params.report_uaddr);
> + if (!u_report)
> + return -EINVAL;
> +
> + report_rsp = snp_alloc_firmware_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO);
> + if (!report_rsp)
> + return -ENOMEM;
> +
> + data.len = sizeof(data);
> + data.key_sel = params.key_sel;
> + data.gctx_addr = __psp_pa(sev->snp_context);
> + data.hv_report_paddr = __psp_pa(report_rsp);
> + data.rsvd = 0;
> +
> + ret = sev_issue_cmd(kvm, SEV_CMD_SNP_HV_REPORT_REQ, &data,
> + &argp->error);
> + if (ret)
> + goto e_free_rsp;
> +
> + if (!report_rsp->status) {
> + if (params.report_len < (rsp_size + report_rsp->report_size))
> + ret = -ENOSPC;
> + else
> + rsp_size += report_rsp->report_size;
> +
> + params.report_len = sizeof(*report_rsp) + report_rsp->report_size;
> + }
> +
> + if (copy_to_user(u_report, report_rsp, rsp_size))
> + ret = -EFAULT;
> +
> + if (copy_to_user(u_params, ¶ms, sizeof(params)))
> + ret = -EFAULT;
> +
> +e_free_rsp:
> + snp_free_firmware_page(report_rsp);
> + return ret;
> +}
> +
> struct sev_gmem_populate_args {
> __u8 type;
> int sev_fd;
> @@ -2672,6 +2732,9 @@ int sev_mem_enc_ioctl(struct kvm *kvm, void __user *argp)
> case KVM_SEV_SNP_LAUNCH_FINISH:
> r = snp_launch_finish(kvm, &sev_cmd);
> break;
> + case KVM_SEV_SNP_HV_REPORT_REQ:
> + r = sev_snp_hv_report_request(kvm, &sev_cmd);
> + break;
> default:
> r = -EINVAL;
> goto out;
> diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c
> index 956ea609d0cc..5dd7c3f0d50d 100644
> --- a/drivers/crypto/ccp/sev-dev.c
> +++ b/drivers/crypto/ccp/sev-dev.c
> @@ -259,6 +259,7 @@ static int sev_cmd_buffer_len(int cmd)
> case SEV_CMD_SNP_COMMIT: return sizeof(struct sev_data_snp_commit);
> case SEV_CMD_SNP_FEATURE_INFO: return sizeof(struct sev_data_snp_feature_info);
> case SEV_CMD_SNP_VLEK_LOAD: return sizeof(struct sev_user_data_snp_vlek_load);
> + case SEV_CMD_SNP_HV_REPORT_REQ: return sizeof(struct sev_data_snp_hv_report_req);
> default: return sev_tio_cmd_buffer_len(cmd);
> }
>
> diff --git a/include/linux/psp-sev.h b/include/linux/psp-sev.h
> index 69ffa4b4d1fa..c651a400d124 100644
> --- a/include/linux/psp-sev.h
> +++ b/include/linux/psp-sev.h
> @@ -124,6 +124,7 @@ enum sev_cmd {
> SEV_CMD_SNP_GCTX_CREATE = 0x093,
> SEV_CMD_SNP_GUEST_REQUEST = 0x094,
> SEV_CMD_SNP_ACTIVATE_EX = 0x095,
> + SEV_CMD_SNP_HV_REPORT_REQ = 0x096,
> SEV_CMD_SNP_LAUNCH_START = 0x0A0,
> SEV_CMD_SNP_LAUNCH_UPDATE = 0x0A1,
> SEV_CMD_SNP_LAUNCH_FINISH = 0x0A2,
> @@ -594,6 +595,36 @@ struct sev_data_attestation_report {
> u32 len; /* In/Out */
> } __packed;
>
> +/**
> + * struct sev_data_snp_hv_report_req - SNP_HV_REPORT_REQ command params
> + *
> + * @len: length of the command buffer in bytes
> + * @key_sel: Selects which key to use for generating the signature.
> + * @gctx_addr: System physical address of guest context page
> + * @hv_report_paddr: System physical address where MSG_EXPORT_RSP will be written
> + */
> +struct sev_data_snp_hv_report_req {
> + u32 len; /* In */
> + u32 key_sel :2, /* In */
> + rsvd :30;
> + u64 gctx_addr; /* In */
> + u64 hv_report_paddr; /* In */
> +} __packed;
> +
> +/**
> + * struct sev_data_snp_msg_export_rsp
> + *
> + * @status: Status : 0h: Success. 16h: Invalid parameters.
> + * @report_size: Size in bytes of the attestation report
> + * @report: attestation report
> + */
> +struct sev_data_snp_msg_report_rsp {
> + u32 status; /* Out */
> + u32 report_size; /* Out */
> + u8 rsvd[24];
> + u8 report[];
> +} __packed;
> +
> /**
> * struct sev_data_snp_download_firmware - SNP_DOWNLOAD_FIRMWARE command params
> *
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
2026-01-28 19:49 [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command Thomas Courrege
2026-01-28 19:49 ` [PATCH v6 1/1] " Thomas Courrege
2026-01-28 20:34 ` [PATCH v6 0/1] " Tom Lendacky
@ 2026-01-29 10:35 ` Thomas Courrege
2026-02-11 16:37 ` Thomas Courrege
2 siblings, 1 reply; 7+ messages in thread
From: Thomas Courrege @ 2026-01-29 10:35 UTC (permalink / raw)
To: ashish.kalra, corbet, herbert, john.allen, nikunj, pbonzini,
seanjc, thomas.lendacky
Cc: kvm, linux-crypto, linux-kernel, x86
On 28-01-2026 20:49, Thomas Courrege wrote:
> Overview
> --------
> The SEV-SNP Firmware ABI allows the hypervisor to request an
> attestation report via the SEV_CMD_SNP_HV_REPORT_REQ firmware command.
This allow KVM to expose more of AMD’s SEV‑SNP features.
It also allow developers to easily request attestation.
It could maybe be use by some cloud provider to easily provide an
attestation report through their API, in case the Guest doesn't respond
fast enough or even to compare the reports.
> Testing
> -------
> For testing this via QEMU, please use the following tree:
> https://github.com/Th0rOnDoR/qemu
>
> Patch History
> -------------
> v5 -> v6:
> Fix typos issues in documentation
>
> v4 -> v5:
> Set variables in reverse christmas tree order
> Fix and clean the rsp_size logic
>
> v3 -> v4:
> Add newline in documentation to avoid a warning
> Add base commit
>
> v2 -> v3:
> Add padding to structure, code format
> Write back the full MSG_REPORT_RSP structure
> Remove the memzero_explicit for the report
>
> v1 -> v2:
> Renaming, code format
> Zeroes the report before returning
>
>
> Any feedback is appreciated.
>
> Thanks,
> Thomas
>
>
> Thomas Courrege (1):
> KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
>
> .../virt/kvm/x86/amd-memory-encryption.rst | 28 +++++++++
> arch/x86/include/uapi/asm/kvm.h | 9 +++
> arch/x86/kvm/svm/sev.c | 63 +++++++++++++++++++
> drivers/crypto/ccp/sev-dev.c | 1 +
> include/linux/psp-sev.h | 31 +++++++++
> 5 files changed, 132 insertions(+)
>
>
> base-commit: e89f0e9a0a007e8c3afb8ecd739c0b3255422b00
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
2026-01-29 10:35 ` Thomas Courrege
@ 2026-02-11 16:37 ` Thomas Courrege
2026-02-11 16:47 ` Sean Christopherson
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Courrege @ 2026-02-11 16:37 UTC (permalink / raw)
To: ashish.kalra, seanjc, thomas.lendacky
Cc: kvm, linux-crypto, linux-kernel, x86
On 29-01-2026 11:35, Thomas Courrege wrote:
>
> --
> Regards,
> Thomas
> On 28-01-2026 20:49, Thomas Courrege wrote:
>> Overview
>> --------
>> The SEV-SNP Firmware ABI allows the hypervisor to request an
>> attestation report via the SEV_CMD_SNP_HV_REPORT_REQ firmware command.
> This allow KVM to expose more of AMD’s SEV‑SNP features.
>
> It also allow developers to easily request attestation.
> It could maybe be use by some cloud provider to easily provide an
> attestation report through their API, in case the Guest doesn't respond
> fast enough or even to compare the reports.
>> Testing
>> -------
>> For testing this via QEMU, please use the following tree:
>> https://github.com/Th0rOnDoR/qemu
>>
>> Patch History
>> -------------
>> v5 -> v6:
>> Fix typos issues in documentation
>>
>> v4 -> v5:
>> Set variables in reverse christmas tree order
>> Fix and clean the rsp_size logic
>>
>> v3 -> v4:
>> Add newline in documentation to avoid a warning
>> Add base commit
>>
>> v2 -> v3:
>> Add padding to structure, code format
>> Write back the full MSG_REPORT_RSP structure
>> Remove the memzero_explicit for the report
>>
>> v1 -> v2:
>> Renaming, code format
>> Zeroes the report before returning
>>
>>
>> Any feedback is appreciated.
>>
>> Thanks,
>> Thomas
>>
>>
>> Thomas Courrege (1):
>> KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
>>
>> .../virt/kvm/x86/amd-memory-encryption.rst | 28 +++++++++
>> arch/x86/include/uapi/asm/kvm.h | 9 +++
>> arch/x86/kvm/svm/sev.c | 63 +++++++++++++++++++
>> drivers/crypto/ccp/sev-dev.c | 1 +
>> include/linux/psp-sev.h | 31 +++++++++
>> 5 files changed, 132 insertions(+)
>>
>>
>> base-commit: e89f0e9a0a007e8c3afb8ecd739c0b3255422b00
Gentle ping
Regards,
Thomas
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command
2026-02-11 16:37 ` Thomas Courrege
@ 2026-02-11 16:47 ` Sean Christopherson
0 siblings, 0 replies; 7+ messages in thread
From: Sean Christopherson @ 2026-02-11 16:47 UTC (permalink / raw)
To: Thomas Courrege
Cc: ashish.kalra, thomas.lendacky, kvm, linux-crypto, linux-kernel,
x86
On Wed, Feb 11, 2026, Thomas Courrege wrote:
> Gentle ping
Sorry, we're in a merge window so this won't get any attention for at least several
weeks. See Documentation/process/maintainer-kvm-x86.rst for details.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-02-11 16:47 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-28 19:49 [PATCH v6 0/1] KVM: SEV: Add KVM_SEV_SNP_HV_REPORT_REQ command Thomas Courrege
2026-01-28 19:49 ` [PATCH v6 1/1] " Thomas Courrege
2026-01-28 20:35 ` Tom Lendacky
2026-01-28 20:34 ` [PATCH v6 0/1] " Tom Lendacky
2026-01-29 10:35 ` Thomas Courrege
2026-02-11 16:37 ` Thomas Courrege
2026-02-11 16:47 ` Sean Christopherson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox