-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
722 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
From c07e44df5b54011594a65027f658473a11afe1e1 Mon Sep 17 00:00:00 2001 | ||
From fa17daad7209d62169553ce6336ef29ba4748049 Mon Sep 17 00:00:00 2001 | ||
From: "Jan Alexander Steffens (heftig)" <[email protected]> | ||
Date: Mon, 16 Sep 2019 04:53:20 +0200 | ||
Subject: [PATCH] ZEN: Add sysctl and CONFIG to disallow unprivileged | ||
Subject: [PATCH 1/7] ZEN: Add sysctl and CONFIG to disallow unprivileged | ||
CLONE_NEWUSER | ||
|
||
Our default behavior continues to match the vanilla kernel. | ||
|
@@ -150,5 +150,5 @@ index 9a4b980d695b..4388ca13ea3f 100644 | |
static DEFINE_MUTEX(userns_state_mutex); | ||
|
||
-- | ||
2.31.1 | ||
2.32.0 | ||
|
188 changes: 188 additions & 0 deletions
188
0002-x86-setup-Consolidate-early-memory-reservations.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,188 @@ | ||
From 56e6bb0fe2b790adda81851794409faa533e521c Mon Sep 17 00:00:00 2001 | ||
From: Mike Rapoport <[email protected]> | ||
Date: Tue, 2 Mar 2021 12:04:05 +0200 | ||
Subject: [PATCH 2/7] x86/setup: Consolidate early memory reservations | ||
|
||
The early reservations of memory areas used by the firmware, bootloader, | ||
kernel text and data are spread over setup_arch(). Moreover, some of them | ||
happen *after* memblock allocations, e.g trim_platform_memory_ranges() and | ||
trim_low_memory_range() are called after reserve_real_mode() that allocates | ||
memory. | ||
|
||
There was no corruption of these memory regions because memblock always | ||
allocates memory either from the end of memory (in top-down mode) or above | ||
the kernel image (in bottom-up mode). However, the bottom up mode is going | ||
to be updated to span the entire memory [1] to avoid limitations caused by | ||
KASLR. | ||
|
||
Consolidate early memory reservations in a dedicated function to improve | ||
robustness against future changes. Having the early reservations in one | ||
place also makes it clearer what memory must be reserved before memblock | ||
allocations are allowed. | ||
|
||
Signed-off-by: Mike Rapoport <[email protected]> | ||
Signed-off-by: Borislav Petkov <[email protected]> | ||
Reviewed-by: Baoquan He <[email protected]> | ||
Acked-by: Borislav Petkov <[email protected]> | ||
Acked-by: David Hildenbrand <[email protected]> | ||
Link: [1] https://lore.kernel.org/lkml/[email protected] | ||
Link: https://lkml.kernel.org/r/[email protected] | ||
--- | ||
arch/x86/kernel/setup.c | 92 ++++++++++++++++++++--------------------- | ||
1 file changed, 44 insertions(+), 48 deletions(-) | ||
|
||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c | ||
index e79f21d13a0d..420d881da2bd 100644 | ||
--- a/arch/x86/kernel/setup.c | ||
+++ b/arch/x86/kernel/setup.c | ||
@@ -646,18 +646,6 @@ static void __init trim_snb_memory(void) | ||
} | ||
} | ||
|
||
-/* | ||
- * Here we put platform-specific memory range workarounds, i.e. | ||
- * memory known to be corrupt or otherwise in need to be reserved on | ||
- * specific platforms. | ||
- * | ||
- * If this gets used more widely it could use a real dispatch mechanism. | ||
- */ | ||
-static void __init trim_platform_memory_ranges(void) | ||
-{ | ||
- trim_snb_memory(); | ||
-} | ||
- | ||
static void __init trim_bios_range(void) | ||
{ | ||
/* | ||
@@ -730,7 +718,38 @@ static void __init trim_low_memory_range(void) | ||
{ | ||
memblock_reserve(0, ALIGN(reserve_low, PAGE_SIZE)); | ||
} | ||
- | ||
+ | ||
+static void __init early_reserve_memory(void) | ||
+{ | ||
+ /* | ||
+ * Reserve the memory occupied by the kernel between _text and | ||
+ * __end_of_kernel_reserve symbols. Any kernel sections after the | ||
+ * __end_of_kernel_reserve symbol must be explicitly reserved with a | ||
+ * separate memblock_reserve() or they will be discarded. | ||
+ */ | ||
+ memblock_reserve(__pa_symbol(_text), | ||
+ (unsigned long)__end_of_kernel_reserve - (unsigned long)_text); | ||
+ | ||
+ /* | ||
+ * Make sure page 0 is always reserved because on systems with | ||
+ * L1TF its contents can be leaked to user processes. | ||
+ */ | ||
+ memblock_reserve(0, PAGE_SIZE); | ||
+ | ||
+ early_reserve_initrd(); | ||
+ | ||
+ if (efi_enabled(EFI_BOOT)) | ||
+ efi_memblock_x86_reserve_range(); | ||
+ | ||
+ memblock_x86_reserve_range_setup_data(); | ||
+ | ||
+ reserve_ibft_region(); | ||
+ reserve_bios_regions(); | ||
+ | ||
+ trim_snb_memory(); | ||
+ trim_low_memory_range(); | ||
+} | ||
+ | ||
/* | ||
* Dump out kernel offset information on panic. | ||
*/ | ||
@@ -765,29 +784,6 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) | ||
|
||
void __init setup_arch(char **cmdline_p) | ||
{ | ||
- /* | ||
- * Reserve the memory occupied by the kernel between _text and | ||
- * __end_of_kernel_reserve symbols. Any kernel sections after the | ||
- * __end_of_kernel_reserve symbol must be explicitly reserved with a | ||
- * separate memblock_reserve() or they will be discarded. | ||
- */ | ||
- memblock_reserve(__pa_symbol(_text), | ||
- (unsigned long)__end_of_kernel_reserve - (unsigned long)_text); | ||
- | ||
- /* | ||
- * Make sure page 0 is always reserved because on systems with | ||
- * L1TF its contents can be leaked to user processes. | ||
- */ | ||
- memblock_reserve(0, PAGE_SIZE); | ||
- | ||
- early_reserve_initrd(); | ||
- | ||
- /* | ||
- * At this point everything still needed from the boot loader | ||
- * or BIOS or kernel text should be early reserved or marked not | ||
- * RAM in e820. All other memory is free game. | ||
- */ | ||
- | ||
#ifdef CONFIG_X86_32 | ||
memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data)); | ||
|
||
@@ -911,8 +907,18 @@ void __init setup_arch(char **cmdline_p) | ||
|
||
parse_early_param(); | ||
|
||
- if (efi_enabled(EFI_BOOT)) | ||
- efi_memblock_x86_reserve_range(); | ||
+ /* | ||
+ * Do some memory reservations *before* memory is added to | ||
+ * memblock, so memblock allocations won't overwrite it. | ||
+ * Do it after early param, so we could get (unlikely) panic from | ||
+ * serial. | ||
+ * | ||
+ * After this point everything still needed from the boot loader or | ||
+ * firmware or kernel text should be early reserved or marked not | ||
+ * RAM in e820. All other memory is free game. | ||
+ */ | ||
+ early_reserve_memory(); | ||
+ | ||
#ifdef CONFIG_MEMORY_HOTPLUG | ||
/* | ||
* Memory used by the kernel cannot be hot-removed because Linux | ||
@@ -939,9 +945,6 @@ void __init setup_arch(char **cmdline_p) | ||
|
||
x86_report_nx(); | ||
|
||
- /* after early param, so could get panic from serial */ | ||
- memblock_x86_reserve_range_setup_data(); | ||
- | ||
if (acpi_mps_check()) { | ||
#ifdef CONFIG_X86_LOCAL_APIC | ||
disable_apic = 1; | ||
@@ -1033,8 +1036,6 @@ void __init setup_arch(char **cmdline_p) | ||
*/ | ||
find_smp_config(); | ||
|
||
- reserve_ibft_region(); | ||
- | ||
early_alloc_pgt_buf(); | ||
|
||
/* | ||
@@ -1055,8 +1056,6 @@ void __init setup_arch(char **cmdline_p) | ||
*/ | ||
sev_setup_arch(); | ||
|
||
- reserve_bios_regions(); | ||
- | ||
efi_fake_memmap(); | ||
efi_find_mirror(); | ||
efi_esrt_init(); | ||
@@ -1082,9 +1081,6 @@ void __init setup_arch(char **cmdline_p) | ||
|
||
reserve_real_mode(); | ||
|
||
- trim_platform_memory_ranges(); | ||
- trim_low_memory_range(); | ||
- | ||
init_mem_mapping(); | ||
|
||
idt_setup_early_pf(); | ||
-- | ||
2.32.0 | ||
|
67 changes: 67 additions & 0 deletions
67
0003-x86-setup-Merge-several-reservations-of-start-of-mem.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
From e63cb4a867fe803dc90376af8b268ba1549ec36e Mon Sep 17 00:00:00 2001 | ||
From: Mike Rapoport <[email protected]> | ||
Date: Tue, 2 Mar 2021 12:04:06 +0200 | ||
Subject: [PATCH 3/7] x86/setup: Merge several reservations of start of memory | ||
|
||
Currently, the first several pages are reserved both to avoid leaking | ||
their contents on systems with L1TF and to avoid corrupting BIOS memory. | ||
|
||
Merge the two memory reservations. | ||
|
||
Signed-off-by: Mike Rapoport <[email protected]> | ||
Signed-off-by: Borislav Petkov <[email protected]> | ||
Reviewed-by: David Hildenbrand <[email protected]> | ||
Acked-by: Borislav Petkov <[email protected]> | ||
Link: https://lkml.kernel.org/r/[email protected] | ||
--- | ||
arch/x86/kernel/setup.c | 19 ++++++++++--------- | ||
1 file changed, 10 insertions(+), 9 deletions(-) | ||
|
||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c | ||
index 420d881da2bd..282d572e49af 100644 | ||
--- a/arch/x86/kernel/setup.c | ||
+++ b/arch/x86/kernel/setup.c | ||
@@ -714,11 +714,6 @@ static int __init parse_reservelow(char *p) | ||
|
||
early_param("reservelow", parse_reservelow); | ||
|
||
-static void __init trim_low_memory_range(void) | ||
-{ | ||
- memblock_reserve(0, ALIGN(reserve_low, PAGE_SIZE)); | ||
-} | ||
- | ||
static void __init early_reserve_memory(void) | ||
{ | ||
/* | ||
@@ -731,10 +726,17 @@ static void __init early_reserve_memory(void) | ||
(unsigned long)__end_of_kernel_reserve - (unsigned long)_text); | ||
|
||
/* | ||
- * Make sure page 0 is always reserved because on systems with | ||
- * L1TF its contents can be leaked to user processes. | ||
+ * The first 4Kb of memory is a BIOS owned area, but generally it is | ||
+ * not listed as such in the E820 table. | ||
+ * | ||
+ * Reserve the first memory page and typically some additional | ||
+ * memory (64KiB by default) since some BIOSes are known to corrupt | ||
+ * low memory. See the Kconfig help text for X86_RESERVE_LOW. | ||
+ * | ||
+ * In addition, make sure page 0 is always reserved because on | ||
+ * systems with L1TF its contents can be leaked to user processes. | ||
*/ | ||
- memblock_reserve(0, PAGE_SIZE); | ||
+ memblock_reserve(0, ALIGN(reserve_low, PAGE_SIZE)); | ||
|
||
early_reserve_initrd(); | ||
|
||
@@ -747,7 +749,6 @@ static void __init early_reserve_memory(void) | ||
reserve_bios_regions(); | ||
|
||
trim_snb_memory(); | ||
- trim_low_memory_range(); | ||
} | ||
|
||
/* | ||
-- | ||
2.32.0 | ||
|
Oops, something went wrong.