All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Lendacky <thomas.lendacky@amd.com>
To: Ard Biesheuvel <ardb+git@google.com>, linux-efi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
	Ard Biesheuvel <ardb@kernel.org>, Borislav Petkov <bp@alien8.de>
Subject: Re: [PATCH v4 2/3] x86/efistub: Obtain SEV CC blob address from the stub
Date: Thu, 11 Sep 2025 16:27:27 -0500	[thread overview]
Message-ID: <2abffe1f-e289-4261-97f0-cfc4cf674fd0@amd.com> (raw)
In-Reply-To: <20250909080631.2867579-7-ardb+git@google.com>

On 9/9/25 03:06, Ard Biesheuvel wrote:
> From: Ard Biesheuvel <ardb@kernel.org>
> 
> The x86 EFI stub no longer boots the core kernel via the traditional
> decompressor but jumps straight to it, avoiding all the page fault
> handling and other complexity that is entirely unnecessary when booting
> via EFI, which guarantees that all system memory is mapped 1:1.
> 
> The SEV startup code in the core kernel expects the address of the CC
> blob configuration table in boot_params, so store it there when booting
> from EFI with SEV-SNP enabled. This removes the need to call
> sev_enable() from the EFI stub.
> 
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
>  drivers/firmware/efi/libstub/x86-stub.c | 21 +++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
> index 0d05eac7c72b..c4ef645762ec 100644
> --- a/drivers/firmware/efi/libstub/x86-stub.c
> +++ b/drivers/firmware/efi/libstub/x86-stub.c
> @@ -681,17 +681,28 @@ static efi_status_t exit_boot(struct boot_params *boot_params, void *handle)
>  	return EFI_SUCCESS;
>  }
>  
> -static bool have_unsupported_snp_features(void)
> +static bool check_snp_features(struct boot_params *bp)
>  {
> +	u64 status = sev_get_status();
>  	u64 unsupported;
>  
> -	unsupported = snp_get_unsupported_features(sev_get_status());
> +	unsupported = snp_get_unsupported_features(status);
>  	if (unsupported) {
>  		efi_err("Unsupported SEV-SNP features detected: 0x%llx\n",
>  			unsupported);
> -		return true;
> +		return false;
>  	}
> -	return false;
> +
> +	if (status & MSR_AMD64_SEV_SNP_ENABLED) {
> +		void *tbl = get_efi_config_table(EFI_CC_BLOB_GUID);
> +
> +		if (!tbl) {
> +			efi_err("SEV-SNP is enabled but CC blob not found\n");
> +			return false;
> +		}
> +		bp->cc_blob_address = (u32)(unsigned long)tbl;

I think we ran into bugs where the cc_blob_address was random data from a
boot loader when SNP wasn't active and that's why we always initialize it
to 0:

4b1c74240757 ("x86/boot: Don't propagate uninitialized boot_params->cc_blob_address")

So we probably need the same statement that is at the beginning of the
decompressor sev_enable() at the very beginning of this function to ensure
cc_blob_address is set to zero:

	/*    
	 * bp->cc_blob_address should only be set by boot/compressed kernel.
	 * Initialize it to 0 to ensure that uninitialized values from
	 * buggy bootloaders aren't propagated.
	 */
	if (bp)
		bp->cc_blob_address = 0;

Thanks,
Tom

> +	}
> +	return true;
>  }
>  
>  static void efi_get_seed(void *seed, int size)
> @@ -831,7 +842,7 @@ void __noreturn efi_stub_entry(efi_handle_t handle,
>  
>  	hdr = &boot_params->hdr;
>  
> -	if (have_unsupported_snp_features())
> +	if (!check_snp_features(boot_params))
>  		efi_exit(handle, EFI_UNSUPPORTED);
>  
>  	if (IS_ENABLED(CONFIG_EFI_DXE_MEM_ATTRIBUTES)) {


  reply	other threads:[~2025-09-11 21:27 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-09  8:06 [PATCH v4 0/3] efi: Don't initalize SEV-SNP from the EFI stub Ard Biesheuvel
2025-09-09  8:06 ` [PATCH v4 1/3] x86/boot: Drop unused sev_enable() fallback Ard Biesheuvel
2025-09-11 21:35   ` Tom Lendacky
2025-11-20 20:26   ` [tip: x86/sev] " tip-bot2 for Ard Biesheuvel
2025-09-09  8:06 ` [PATCH v4 2/3] x86/efistub: Obtain SEV CC blob address from the stub Ard Biesheuvel
2025-09-11 21:27   ` Tom Lendacky [this message]
2025-09-11 21:49     ` Ard Biesheuvel
2025-09-09  8:06 ` [PATCH v4 3/3] x86/efistub: Don't bother enabling SEV in the EFI stub Ard Biesheuvel
2025-09-11 21:53   ` Tom Lendacky
2025-09-12  7:29     ` Ard Biesheuvel
2025-09-12  8:26       ` Ard Biesheuvel
2025-09-12 13:32         ` Tom Lendacky
2025-09-15 16:08           ` Borislav Petkov
2025-09-12 20:34 ` Ashish Kalra
2025-09-12 22:22   ` Ard Biesheuvel

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=2abffe1f-e289-4261-97f0-cfc4cf674fd0@amd.com \
    --to=thomas.lendacky@amd.com \
    --cc=ardb+git@google.com \
    --cc=ardb@kernel.org \
    --cc=bp@alien8.de \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=x86@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.