From 633d1a3a7790c12751ab3388d5a66eb96a0b87c5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 6 Jun 2019 17:26:30 +0200 Subject: [PATCH] 4.9-stable patches added patches: efi-libstub-unify-command-line-param-parsing.patch --- ...tub-unify-command-line-param-parsing.patch | 170 ++++++++++++++++++ queue-4.9/series | 1 + 2 files changed, 171 insertions(+) create mode 100644 queue-4.9/efi-libstub-unify-command-line-param-parsing.patch diff --git a/queue-4.9/efi-libstub-unify-command-line-param-parsing.patch b/queue-4.9/efi-libstub-unify-command-line-param-parsing.patch new file mode 100644 index 00000000000..e385f32602a --- /dev/null +++ b/queue-4.9/efi-libstub-unify-command-line-param-parsing.patch @@ -0,0 +1,170 @@ +From 60f38de7a8d4e816100ceafd1b382df52527bd50 Mon Sep 17 00:00:00 2001 +From: Ard Biesheuvel +Date: Tue, 4 Apr 2017 17:09:08 +0100 +Subject: efi/libstub: Unify command line param parsing + +From: Ard Biesheuvel + +commit 60f38de7a8d4e816100ceafd1b382df52527bd50 upstream. + +Merge the parsing of the command line carried out in arm-stub.c with +the handling in efi_parse_options(). Note that this also fixes the +missing handling of CONFIG_CMDLINE_FORCE=y, in which case the builtin +command line should supersede the one passed by the firmware. + +Signed-off-by: Ard Biesheuvel +Cc: Linus Torvalds +Cc: Matt Fleming +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Cc: bhe@redhat.com +Cc: bhsharma@redhat.com +Cc: bp@alien8.de +Cc: eugene@hp.com +Cc: evgeny.kalugin@intel.com +Cc: jhugo@codeaurora.org +Cc: leif.lindholm@linaro.org +Cc: linux-efi@vger.kernel.org +Cc: mark.rutland@arm.com +Cc: roy.franz@cavium.com +Cc: rruigrok@codeaurora.org +Link: http://lkml.kernel.org/r/20170404160910.28115-1-ard.biesheuvel@linaro.org +Signed-off-by: Ingo Molnar +[ardb: fix up merge conflicts with 4.9.180] +Signed-off-by: Ard Biesheuvel +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/firmware/efi/libstub/arm-stub.c | 23 +++++++---------------- + drivers/firmware/efi/libstub/arm64-stub.c | 4 +--- + drivers/firmware/efi/libstub/efi-stub-helper.c | 19 +++++++++++-------- + drivers/firmware/efi/libstub/efistub.h | 2 ++ + include/linux/efi.h | 2 +- + 5 files changed, 22 insertions(+), 28 deletions(-) + +--- a/drivers/firmware/efi/libstub/arm-stub.c ++++ b/drivers/firmware/efi/libstub/arm-stub.c +@@ -18,7 +18,6 @@ + + #include "efistub.h" + +-bool __nokaslr; + + static int efi_get_secureboot(efi_system_table_t *sys_table_arg) + { +@@ -268,18 +267,6 @@ unsigned long efi_entry(void *handle, ef + goto fail; + } + +- /* check whether 'nokaslr' was passed on the command line */ +- if (IS_ENABLED(CONFIG_RANDOMIZE_BASE)) { +- static const u8 default_cmdline[] = CONFIG_CMDLINE; +- const u8 *str, *cmdline = cmdline_ptr; +- +- if (IS_ENABLED(CONFIG_CMDLINE_FORCE)) +- cmdline = default_cmdline; +- str = strstr(cmdline, "nokaslr"); +- if (str == cmdline || (str > cmdline && *(str - 1) == ' ')) +- __nokaslr = true; +- } +- + si = setup_graphics(sys_table); + + status = handle_kernel_image(sys_table, image_addr, &image_size, +@@ -291,9 +278,13 @@ unsigned long efi_entry(void *handle, ef + goto fail_free_cmdline; + } + +- status = efi_parse_options(cmdline_ptr); +- if (status != EFI_SUCCESS) +- pr_efi_err(sys_table, "Failed to parse EFI cmdline options\n"); ++ if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) || ++ IS_ENABLED(CONFIG_CMDLINE_FORCE) || ++ cmdline_size == 0) ++ efi_parse_options(CONFIG_CMDLINE); ++ ++ if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && cmdline_size > 0) ++ efi_parse_options(cmdline_ptr); + + secure_boot = efi_get_secureboot(sys_table); + if (secure_boot > 0) +--- a/drivers/firmware/efi/libstub/arm64-stub.c ++++ b/drivers/firmware/efi/libstub/arm64-stub.c +@@ -24,8 +24,6 @@ + + #include "efistub.h" + +-extern bool __nokaslr; +- + efi_status_t check_platform_features(efi_system_table_t *sys_table_arg) + { + u64 tg; +@@ -60,7 +58,7 @@ efi_status_t handle_kernel_image(efi_sys + u64 phys_seed = 0; + + if (IS_ENABLED(CONFIG_RANDOMIZE_BASE)) { +- if (!__nokaslr) { ++ if (!nokaslr()) { + status = efi_get_random_bytes(sys_table_arg, + sizeof(phys_seed), + (u8 *)&phys_seed); +--- a/drivers/firmware/efi/libstub/efi-stub-helper.c ++++ b/drivers/firmware/efi/libstub/efi-stub-helper.c +@@ -32,6 +32,13 @@ + + static unsigned long __chunk_size = EFI_READ_CHUNK_SIZE; + ++static int __section(.data) __nokaslr; ++ ++int __pure nokaslr(void) ++{ ++ return __nokaslr; ++} ++ + /* + * Allow the platform to override the allocation granularity: this allows + * systems that have the capability to run with a larger page size to deal +@@ -351,17 +358,13 @@ void efi_free(efi_system_table_t *sys_ta + * environments, first in the early boot environment of the EFI boot + * stub, and subsequently during the kernel boot. + */ +-efi_status_t efi_parse_options(char *cmdline) ++efi_status_t efi_parse_options(char const *cmdline) + { + char *str; + +- /* +- * Currently, the only efi= option we look for is 'nochunk', which +- * is intended to work around known issues on certain x86 UEFI +- * versions. So ignore for now on other architectures. +- */ +- if (!IS_ENABLED(CONFIG_X86)) +- return EFI_SUCCESS; ++ str = strstr(cmdline, "nokaslr"); ++ if (str == cmdline || (str && str > cmdline && *(str - 1) == ' ')) ++ __nokaslr = 1; + + /* + * If no EFI parameters were specified on the cmdline we've got +--- a/drivers/firmware/efi/libstub/efistub.h ++++ b/drivers/firmware/efi/libstub/efistub.h +@@ -15,6 +15,8 @@ + */ + #undef __init + ++extern int __pure nokaslr(void); ++ + void efi_char16_printk(efi_system_table_t *, efi_char16_t *); + + efi_status_t efi_open_volume(efi_system_table_t *sys_table_arg, void *__image, +--- a/include/linux/efi.h ++++ b/include/linux/efi.h +@@ -1427,7 +1427,7 @@ efi_status_t handle_cmdline_files(efi_sy + unsigned long *load_addr, + unsigned long *load_size); + +-efi_status_t efi_parse_options(char *cmdline); ++efi_status_t efi_parse_options(char const *cmdline); + + efi_status_t efi_setup_gop(efi_system_table_t *sys_table_arg, + struct screen_info *si, efi_guid_t *proto, diff --git a/queue-4.9/series b/queue-4.9/series index 667cf88459d..eb52a8ca5c1 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -59,3 +59,4 @@ mm-prevent-get_user_pages-from-overflowing-page-refcount.patch mm-make-page-ref-count-overflow-check-tighter-and-more-explicit.patch coredump-fix-race-condition-between-mmget_not_zero-get_task_mm-and-core-dumping.patch revert-x86-build-move-_etext-to-actual-end-of-.text.patch +efi-libstub-unify-command-line-param-parsing.patch -- 2.47.2