From: Greg Kroah-Hartman Date: Mon, 27 Dec 2021 11:04:32 +0000 (+0100) Subject: 5.15-stable patches X-Git-Tag: v4.4.297~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c8b9898d67bb4c370a158f966f73d8252eadfd72;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: revert-x86-boot-pull-up-cmdline-preparation-and-early-param-parsing.patch x86-boot-move-efi-range-reservation-after-cmdline-parsing.patch --- diff --git a/queue-5.15/revert-x86-boot-pull-up-cmdline-preparation-and-early-param-parsing.patch b/queue-5.15/revert-x86-boot-pull-up-cmdline-preparation-and-early-param-parsing.patch new file mode 100644 index 00000000000..ba7223fe2db --- /dev/null +++ b/queue-5.15/revert-x86-boot-pull-up-cmdline-preparation-and-early-param-parsing.patch @@ -0,0 +1,123 @@ +From fbe6183998546f8896ee0b620ece86deff5a2fd1 Mon Sep 17 00:00:00 2001 +From: Borislav Petkov +Date: Mon, 13 Dec 2021 12:27:56 +0100 +Subject: Revert "x86/boot: Pull up cmdline preparation and early param parsing" + +From: Borislav Petkov + +commit fbe6183998546f8896ee0b620ece86deff5a2fd1 upstream. + +This reverts commit 8d48bf8206f77aa8687f0e241e901e5197e52423. + +It turned out to be a bad idea as it broke supplying mem= cmdline +parameters due to parse_memopt() requiring preparatory work like setting +up the e820 table in e820__memory_setup() in order to be able to exclude +the range specified by mem=. + +Pulling that up would've broken Xen PV again, see threads at + + https://lkml.kernel.org/r/20210920120421.29276-1-jgross@suse.com + +due to xen_memory_setup() needing the first reservations in +early_reserve_memory() - kernel and initrd - to have happened already. + +This could be fixed again by having Xen do those reservations itself... + +Long story short, revert this and do a simpler fix in a later patch. + +Signed-off-by: Borislav Petkov +Link: https://lore.kernel.org/r/20211213112757.2612-3-bp@alien8.de +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/kernel/setup.c | 66 +++++++++++++++++++----------------------------- + 1 file changed, 27 insertions(+), 39 deletions(-) + +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -742,28 +742,6 @@ dump_kernel_offset(struct notifier_block + return 0; + } + +-static char *prepare_command_line(void) +-{ +-#ifdef CONFIG_CMDLINE_BOOL +-#ifdef CONFIG_CMDLINE_OVERRIDE +- strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE); +-#else +- if (builtin_cmdline[0]) { +- /* append boot loader cmdline to builtin */ +- strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE); +- strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE); +- strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE); +- } +-#endif +-#endif +- +- strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE); +- +- parse_early_param(); +- +- return command_line; +-} +- + /* + * Determine if we were loaded by an EFI loader. If so, then we have also been + * passed the efi memmap, systab, etc., so we should use these data structures +@@ -853,23 +831,6 @@ void __init setup_arch(char **cmdline_p) + x86_init.oem.arch_setup(); + + /* +- * x86_configure_nx() is called before parse_early_param() (called by +- * prepare_command_line()) to detect whether hardware doesn't support +- * NX (so that the early EHCI debug console setup can safely call +- * set_fixmap()). It may then be called again from within noexec_setup() +- * during parsing early parameters to honor the respective command line +- * option. +- */ +- x86_configure_nx(); +- +- /* +- * This parses early params and it needs to run before +- * early_reserve_memory() because latter relies on such settings +- * supplied as early params. +- */ +- *cmdline_p = prepare_command_line(); +- +- /* + * Do some memory reservations *before* memory is added to memblock, so + * memblock allocations won't overwrite it. + * +@@ -902,6 +863,33 @@ void __init setup_arch(char **cmdline_p) + bss_resource.start = __pa_symbol(__bss_start); + bss_resource.end = __pa_symbol(__bss_stop)-1; + ++#ifdef CONFIG_CMDLINE_BOOL ++#ifdef CONFIG_CMDLINE_OVERRIDE ++ strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE); ++#else ++ if (builtin_cmdline[0]) { ++ /* append boot loader cmdline to builtin */ ++ strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE); ++ strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE); ++ strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE); ++ } ++#endif ++#endif ++ ++ strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE); ++ *cmdline_p = command_line; ++ ++ /* ++ * x86_configure_nx() is called before parse_early_param() to detect ++ * whether hardware doesn't support NX (so that the early EHCI debug ++ * console setup can safely call set_fixmap()). It may then be called ++ * again from within noexec_setup() during parsing early parameters ++ * to honor the respective command line option. ++ */ ++ x86_configure_nx(); ++ ++ parse_early_param(); ++ + #ifdef CONFIG_MEMORY_HOTPLUG + /* + * Memory used by the kernel cannot be hot-removed because Linux diff --git a/queue-5.15/series b/queue-5.15/series index db91a5995e8..a1603425063 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -60,3 +60,5 @@ uapi-fix-undefined-__always_inline-on-non-glibc-syst.patch compiler.h-fix-annotation-macro-misplacement-with-cl.patch platform-x86-intel-remove-x86_platform_drivers_intel.patch kernel-crash_core-suppress-unknown-crashkernel-param.patch +revert-x86-boot-pull-up-cmdline-preparation-and-early-param-parsing.patch +x86-boot-move-efi-range-reservation-after-cmdline-parsing.patch diff --git a/queue-5.15/x86-boot-move-efi-range-reservation-after-cmdline-parsing.patch b/queue-5.15/x86-boot-move-efi-range-reservation-after-cmdline-parsing.patch new file mode 100644 index 00000000000..77909245be8 --- /dev/null +++ b/queue-5.15/x86-boot-move-efi-range-reservation-after-cmdline-parsing.patch @@ -0,0 +1,75 @@ +From 2f5b3514c33fecad4003ce0f22ca9691492d310b Mon Sep 17 00:00:00 2001 +From: Mike Rapoport +Date: Mon, 13 Dec 2021 12:27:57 +0100 +Subject: x86/boot: Move EFI range reservation after cmdline parsing + +From: Mike Rapoport + +commit 2f5b3514c33fecad4003ce0f22ca9691492d310b upstream. + +The memory reservation in arch/x86/platform/efi/efi.c depends on at +least two command line parameters. Put it back later in the boot process +and move efi_memblock_x86_reserve_range() out of early_memory_reserve(). + +An attempt to fix this was done in + + 8d48bf8206f7 ("x86/boot: Pull up cmdline preparation and early param parsing") + +but that caused other troubles so it got reverted. + +The bug this is addressing is: + +Dan reports that Anjaneya Chagam can no longer use the efi=nosoftreserve +kernel command line parameter to suppress "soft reservation" behavior. + +This is due to the fact that the following call-chain happens at boot: + + early_reserve_memory + |-> efi_memblock_x86_reserve_range + |-> efi_fake_memmap_early + +which does + + if (!efi_soft_reserve_enabled()) + return; + +and that would have set EFI_MEM_NO_SOFT_RESERVE after having parsed +"nosoftreserve". + +However, parse_early_param() gets called *after* it, leading to the boot +cmdline not being taken into account. + +See also https://lore.kernel.org/r/e8dd8993c38702ee6dd73b3c11f158617e665607.camel@intel.com + + [ bp: Turn into a proper patch. ] + +Signed-off-by: Mike Rapoport +Signed-off-by: Borislav Petkov +Link: https://lore.kernel.org/r/20211213112757.2612-4-bp@alien8.de +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/kernel/setup.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -713,9 +713,6 @@ static void __init early_reserve_memory( + + early_reserve_initrd(); + +- if (efi_enabled(EFI_BOOT)) +- efi_memblock_x86_reserve_range(); +- + memblock_x86_reserve_range_setup_data(); + + reserve_ibft_region(); +@@ -890,6 +887,9 @@ void __init setup_arch(char **cmdline_p) + + parse_early_param(); + ++ if (efi_enabled(EFI_BOOT)) ++ efi_memblock_x86_reserve_range(); ++ + #ifdef CONFIG_MEMORY_HOTPLUG + /* + * Memory used by the kernel cannot be hot-removed because Linux