[PATCH] kexec: don't act as EFI chainloader if noefi.

Dave Young dyoung at redhat.com
Wed Oct 17 20:48:49 PDT 2018


On 10/17/18 at 04:41pm, Chris Koch wrote:
> From: Christopher Koch <chrisko at google.com>
> 
> An EFI-booted Linux kernel will commit a virtual memory map in
> efi_enter_virtual_mode, which is only done if
> efi_enabled(EFI_RUNTIME_SERVICES). This can be disabled by adding noefi
> to the command line.
> 
> kexec's setup_efi_state will then pass a memmap_size of 0 to the next
> kernel.
> 
> A Linux kernel cannot handle a memmap_size of 0 given by its bootloader:
> efi_memblock_x86_reserve_range divides by the memmap_size and hits a
> divide by 0 error.
> 
> When the 1st kernel is booted with noefi, it should not even attempt to
> pass EFI information to any kexec'd kernel.
> 
> Signed-off-by: Christopher Koch <chrisko at google.com>
> ---
>  arch/x86/kernel/kexec-bzimage64.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c
> index 278cd07228dd..8ab4ffb901ce 100644
> --- a/arch/x86/kernel/kexec-bzimage64.c
> +++ b/arch/x86/kernel/kexec-bzimage64.c
> @@ -179,6 +179,14 @@ setup_efi_state(struct boot_params *params, unsigned long params_load_addr,
>  	if (efi_enabled(EFI_OLD_MEMMAP))
>  		return 0;
>  
> +	/*
> +	 * If we booted with noefi on the command line, we never committed a
> +	 * virtual memory map. It makes no sense to act as an EFI chainloader in
> +	 * that case.
> +	 */
> +	if (!efi_enabled(EFI_RUNTIME_SERVICES))
> +		return 0;
> +

Previously there was a report from Mike Galbraith <efault at gmx.de> for
the case efi=noruntime,  I was doing some cleanup for the
kexec_file_load efi code path, but I'm occupied with some other thing,
that is delayed.

I think your patch looks good,  can you add more words in the code
comment about efi=noruntime,  also maybe mention if one want to use
kexec reboot in case noefi/noruntime he should pass acpi_rsdp= param
in 2nd kernel cmdline.

>  	ei->efi_loader_signature = current_ei->efi_loader_signature;
>  	ei->efi_systab = current_ei->efi_systab;
>  	ei->efi_systab_hi = current_ei->efi_systab_hi;
> -- 
> 2.19.1.331.ge82ca0e54c-goog
> 
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec

Thanks
Dave



More information about the kexec mailing list