Re: [PATCH] efi/x86: Call efi_parse_options() from efi_main()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12 September 2018 at 15:18, Hans de Goede <hdegoede@xxxxxxxxxx> wrote:
> Before this commit we were only calling efi_parse_options() from
> make_boot_params(), but make_boot_params() only gets called if the
> kernel gets booted directly as an EFI executable. So when booted through
> e.g. grub we ended up not parsing the commandline in the boot code.
>
> This makes the drivers/firmware/efi/libstub code ignore the "quiet"
> commandline argument resulting in the following message being printed:
> "EFI stub: UEFI Secure Boot is enabled."
>
> Despite the quiet request. This commits adds an extra call to
> efi_parse_options() to efi_main() to make sure that the options are
> always processed. This fixes quiet not working.
>
> This also fixes the libstub code ignoring nokaslr and efi=nochunk.
>
> Reported-by: Peter Robinson <pbrobinson@xxxxxxxxxx>
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
> ---
>  arch/x86/boot/compressed/eboot.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
>
> diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
> index aaabf979cbd9..a4c85d37adc9 100644
> --- a/arch/x86/boot/compressed/eboot.c
> +++ b/arch/x86/boot/compressed/eboot.c
> @@ -738,6 +738,7 @@ efi_main(struct efi_config *c, struct boot_params *boot_params)
>         struct desc_struct *desc;
>         void *handle;
>         efi_system_table_t *_table;
> +       const char *cmdline_ptr;
>
>         efi_early = c;
>
> @@ -755,6 +756,15 @@ efi_main(struct efi_config *c, struct boot_params *boot_params)
>         else
>                 setup_boot_services32(efi_early);
>
> +       /*
> +        * make_boot_params() may have been called before efi_main(), in which
> +        * case this is the second time we parse the cmdline. This is ok,
> +        * parsing the cmdline multiple times does not have side-effects.
> +        */
> +       cmdline_ptr = (const char *)((u64)hdr->cmd_line_ptr |
> +                                   ((u64)boot_params->ext_cmd_line_ptr << 32));
> +       efi_parse_options(cmdline_ptr);
> +

This triggers a warning on 32-bit because sizeof(void*) != sizeof(u64)

>         /*
>          * If the boot loader gave us a value for secure_boot then we use that,
>          * otherwise we ask the BIOS.
> --
> 2.19.0.rc0
>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux