summaryrefslogtreecommitdiffstats
path: root/efi-x86-call-parse-options-from-efi-main.patch
diff options
context:
space:
mode:
Diffstat (limited to 'efi-x86-call-parse-options-from-efi-main.patch')
-rw-r--r--efi-x86-call-parse-options-from-efi-main.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/efi-x86-call-parse-options-from-efi-main.patch b/efi-x86-call-parse-options-from-efi-main.patch
new file mode 100644
index 000000000..a1a3a34d4
--- /dev/null
+++ b/efi-x86-call-parse-options-from-efi-main.patch
@@ -0,0 +1,58 @@
+From ecb77f61f10b36476133e31cdc001892b5463b90 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Wed, 12 Sep 2018 20:32:05 +0200
+Subject: efi/x86: Call efi_parse_options() from efi_main()
+
+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@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+---
+ 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 1458b1700fc7..8b4c5e001157 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;
++ unsigned long cmdline_paddr;
+
+ 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_paddr = ((u64)hdr->cmd_line_ptr |
++ ((u64)boot_params->ext_cmd_line_ptr << 32));
++ efi_parse_options((char *)cmdline_paddr);
++
+ /*
+ * If the boot loader gave us a value for secure_boot then we use that,
+ * otherwise we ask the BIOS.
+--
+cgit 1.2-0.3.lf.el7
+