From: Tom Lendacky <thomas.lendacky@amd.com>
To: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Ashish Kalra <ashish.kalra@amd.com>,
John Allen <john.allen@amd.com>
Cc: kvm@vger.kernel.org, linux-crypto@vger.kernel.org,
linux-kernel@vger.kernel.org,
Herbert Xu <herbert@gondor.apana.org.au>,
Tycho Andersen <tycho@kernel.org>
Subject: Re: [PATCH v3 2/7] crypto/ccp: export firmware supported vm types
Date: Fri, 17 Apr 2026 09:12:49 -0500 [thread overview]
Message-ID: <0f4bb67e-ada5-42c5-8470-6447b5df0085@amd.com> (raw)
In-Reply-To: <20260416232329.3408497-3-seanjc@google.com>
On 4/16/26 18:23, Sean Christopherson wrote:
> From: Tycho Andersen <tycho@kernel.org>
>
> In some configurations, the firmware does not support all VM types. The SEV
> firmware has an entry in the TCB_VERSION structure referred to as the
> Security Version Number in the SEV-SNP firmware specification and referred
> to as the "SPL" in SEV firmware release notes. The SEV firmware release
> notes say:
>
> On every SEV firmware release where a security mitigation has been
> added, the SNP SPL gets increased by 1. This is to let users know that
> it is important to update to this version.
>
> The SEV firmware release that fixed CVE-2025-48514 by disabling SEV-ES
> support on vulnerable platforms has this SVN increased to reflect the fix.
> The SVN is platform-specific, as is the structure of TCB_VERSION.
>
> Check CURRENT_TCB instead of REPORTED_TCB, since the firmware behaves with
> the CURRENT_TCB SVN level and will reject SEV-ES VMs accordingly.
>
> Parse the SVN, and mask off the SEV_ES supported VM type from the list of
> supported types if it is above the per-platform threshold for the relevant
> platforms.
>
> Signed-off-by: Tycho Andersen (AMD) <tycho@kernel.org>
> Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
> ---
> drivers/crypto/ccp/sev-dev.c | 70 ++++++++++++++++++++++++++++++++++++
> include/linux/psp-sev.h | 37 +++++++++++++++++++
> 2 files changed, 107 insertions(+)
>
> diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c
> index 64fc402f58df..1e3286c048fe 100644
> --- a/drivers/crypto/ccp/sev-dev.c
> +++ b/drivers/crypto/ccp/sev-dev.c
> @@ -2940,3 +2940,73 @@ void sev_pci_exit(void)
>
> sev_firmware_shutdown(sev);
> }
> +
> +static int get_v1_svn(struct sev_device *sev)
> +{
> + struct sev_snp_tcb_version_genoa_milan *tcb;
> + struct sev_user_data_snp_status status;
> + int ret, error = 0;
> +
> + mutex_lock(&sev_cmd_mutex);
> + ret = __sev_do_snp_platform_status(&status, &error);
> + mutex_unlock(&sev_cmd_mutex);
> + if (ret < 0)
> + return ret;
> +
> + tcb = (struct sev_snp_tcb_version_genoa_milan *)&status
> + .current_tcb_version;
> + return tcb->snp;
> +}
> +
> +static int get_v2_svn(struct sev_device *sev)
> +{
> + struct sev_user_data_snp_status status;
> + struct sev_snp_tcb_version_turin *tcb;
> + int ret, error = 0;
> +
> + mutex_lock(&sev_cmd_mutex);
> + ret = __sev_do_snp_platform_status(&status, &error);
> + mutex_unlock(&sev_cmd_mutex);
> + if (ret < 0)
> + return ret;
> +
> + tcb = (struct sev_snp_tcb_version_turin *)&status
> + .current_tcb_version;
> + return tcb->snp;
> +}
> +
> +static bool sev_firmware_allows_es(struct sev_device *sev)
> +{
> + /* Documented in AMD-SB-3023 */
> + if (boot_cpu_has(X86_FEATURE_ZEN4) || boot_cpu_has(X86_FEATURE_ZEN3))
> + return get_v1_svn(sev) < 0x1b;
> + else if (boot_cpu_has(X86_FEATURE_ZEN5))
> + return get_v2_svn(sev) < 0x4;
> + else
> + return true;
> +}
> +
> +int sev_firmware_supported_vm_types(void)
> +{
> + int supported_vm_types = 0;
> + struct sev_device *sev;
> +
> + if (!psp_master || !psp_master->sev_data)
> + return supported_vm_types;
> + sev = psp_master->sev_data;
> +
> + supported_vm_types |= BIT(KVM_X86_SEV_VM);
> + supported_vm_types |= BIT(KVM_X86_SEV_ES_VM);
> +
> + if (!sev->snp_initialized)
> + return supported_vm_types;
> +
> + supported_vm_types |= BIT(KVM_X86_SNP_VM);
> +
> + if (!sev_firmware_allows_es(sev))
> + supported_vm_types &= ~BIT(KVM_X86_SEV_ES_VM);
> +
> + return supported_vm_types;
> +
> +}
> +EXPORT_SYMBOL_FOR_MODULES(sev_firmware_supported_vm_types, "kvm-amd");
> diff --git a/include/linux/psp-sev.h b/include/linux/psp-sev.h
> index 69ffa4b4d1fa..383a682e94fd 100644
> --- a/include/linux/psp-sev.h
> +++ b/include/linux/psp-sev.h
> @@ -899,6 +899,42 @@ struct snp_feature_info {
> /* Feature bits in EBX */
> #define SNP_SEV_TIO_SUPPORTED BIT(1)
>
> +/**
> + * struct sev_snp_tcb_version_genoa_milan
> + *
> + * @boot_loader: SVN of PSP bootloader
> + * @tee: SVN of PSP operating system
> + * @reserved: reserved
> + * @snp: SVN of SNP firmware
> + * @microcode: Lowest current patch level of all cores
> + */
> +struct sev_snp_tcb_version_genoa_milan {
> + u8 boot_loader;
> + u8 tee;
> + u8 reserved[4];
> + u8 snp;
> + u8 microcode;
> +};
> +
> +/**
> + * struct sev_snp_tcb_version_turin
> + *
> + * @fmc: SVN of FMC firmware
> + * @boot_loader: SVN of PSP bootloader
> + * @tee: SVN of PSP operating system
> + * @snp: SVN of SNP firmware
> + * @reserved: reserved
> + * @microcode: Lowest current patch level of all cores
> + */
> +struct sev_snp_tcb_version_turin {
> + u8 fmc;
> + u8 boot_loader;
> + u8 tee;
> + u8 snp;
> + u8 reserved[3];
> + u8 microcode;
> +};
> +
> #ifdef CONFIG_CRYPTO_DEV_SP_PSP
>
> /**
> @@ -1045,6 +1081,7 @@ void snp_free_firmware_page(void *addr);
> void sev_platform_shutdown(void);
> bool sev_is_snp_ciphertext_hiding_supported(void);
> u64 sev_get_snp_policy_bits(void);
> +int sev_firmware_supported_vm_types(void);
>
> #else /* !CONFIG_CRYPTO_DEV_SP_PSP */
>
next prev parent reply other threads:[~2026-04-17 14:12 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-16 23:23 [PATCH v3 0/7] KVM: SEV: Don't advertise unusable VM types Sean Christopherson
2026-04-16 23:23 ` [PATCH v3 1/7] crypto/ccp: hoist kernel part of SNP_PLATFORM_STATUS Sean Christopherson
2026-04-17 13:48 ` Tom Lendacky
2026-04-16 23:23 ` [PATCH v3 2/7] crypto/ccp: export firmware supported vm types Sean Christopherson
2026-04-17 14:12 ` Tom Lendacky [this message]
2026-04-16 23:23 ` [PATCH v3 3/7] KVM: SEV: Set supported SEV+ VM types during sev_hardware_setup() Sean Christopherson
2026-04-17 14:24 ` Tom Lendacky
2026-04-16 23:23 ` [PATCH v3 4/7] KVM: SEV: Consolidate logic for printing state of SEV{,-ES,-SNP} enabling Sean Christopherson
2026-04-17 14:34 ` Tom Lendacky
2026-04-16 23:23 ` [PATCH v3 5/7] KVM: SEV: Don't advertise support for unusable VM types Sean Christopherson
2026-04-17 14:37 ` Tom Lendacky
2026-04-16 23:23 ` [PATCH v3 6/7] KVM: SEV: Don't advertise VM types that are disabled by firmware Sean Christopherson
2026-04-17 14:39 ` Tom Lendacky
2026-04-16 23:23 ` [PATCH v3 7/7] KVM: selftests: Teach sev_*_test about revoking VM types Sean Christopherson
2026-04-17 15:12 ` [PATCH v3 0/7] KVM: SEV: Don't advertise unusable " Tycho Andersen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0f4bb67e-ada5-42c5-8470-6447b5df0085@amd.com \
--to=thomas.lendacky@amd.com \
--cc=ashish.kalra@amd.com \
--cc=herbert@gondor.apana.org.au \
--cc=john.allen@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=tycho@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox