]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Dec 2021 11:04:32 +0000 (12:04 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Dec 2021 11:04:32 +0000 (12:04 +0100)
added patches:
revert-x86-boot-pull-up-cmdline-preparation-and-early-param-parsing.patch
x86-boot-move-efi-range-reservation-after-cmdline-parsing.patch

queue-5.15/revert-x86-boot-pull-up-cmdline-preparation-and-early-param-parsing.patch [new file with mode: 0644]
queue-5.15/series
queue-5.15/x86-boot-move-efi-range-reservation-after-cmdline-parsing.patch [new file with mode: 0644]

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 (file)
index 0000000..ba7223f
--- /dev/null
@@ -0,0 +1,123 @@
+From fbe6183998546f8896ee0b620ece86deff5a2fd1 Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <bp@suse.de>
+Date: Mon, 13 Dec 2021 12:27:56 +0100
+Subject: Revert "x86/boot: Pull up cmdline preparation and early param parsing"
+
+From: Borislav Petkov <bp@suse.de>
+
+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 <bp@suse.de>
+Link: https://lore.kernel.org/r/20211213112757.2612-3-bp@alien8.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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
index db91a5995e856a059c56b69ce3e731b627564ed8..a160342506399cab75be8cf0f25e6b03b2af5187 100644 (file)
@@ -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 (file)
index 0000000..7790924
--- /dev/null
@@ -0,0 +1,75 @@
+From 2f5b3514c33fecad4003ce0f22ca9691492d310b Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <rppt@kernel.org>
+Date: Mon, 13 Dec 2021 12:27:57 +0100
+Subject: x86/boot: Move EFI range reservation after cmdline parsing
+
+From: Mike Rapoport <rppt@kernel.org>
+
+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 <rppt@kernel.org>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/20211213112757.2612-4-bp@alien8.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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