aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.9.21/0009-x86-KASLR-Fix-kexec-kernel-boot-crash-when-KASLR-ran.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0009-x86-KASLR-Fix-kexec-kernel-boot-crash-when-KASLR-ran.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.9.21/0009-x86-KASLR-Fix-kexec-kernel-boot-crash-when-KASLR-ran.patch79
1 files changed, 0 insertions, 79 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0009-x86-KASLR-Fix-kexec-kernel-boot-crash-when-KASLR-ran.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0009-x86-KASLR-Fix-kexec-kernel-boot-crash-when-KASLR-ran.patch
deleted file mode 100644
index 1e9973e7..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0009-x86-KASLR-Fix-kexec-kernel-boot-crash-when-KASLR-ran.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 29fa51519ae0978980c8fc154eba5b244ad7980f Mon Sep 17 00:00:00 2001
-From: Baoquan He <bhe@redhat.com>
-Date: Thu, 27 Apr 2017 15:42:20 +0800
-Subject: [PATCH 09/93] x86/KASLR: Fix kexec kernel boot crash when KASLR
- randomization fails
-
-[ Upstream commit da63b6b20077469bd6bd96e07991ce145fc4fbc4 ]
-
-Dave found that a kdump kernel with KASLR enabled will reset to the BIOS
-immediately if physical randomization failed to find a new position for
-the kernel. A kernel with the 'nokaslr' option works in this case.
-
-The reason is that KASLR will install a new page table for the identity
-mapping, while it missed building it for the original kernel location
-if KASLR physical randomization fails.
-
-This only happens in the kexec/kdump kernel, because the identity mapping
-has been built for kexec/kdump in the 1st kernel for the whole memory by
-calling init_pgtable(). Here if physical randomizaiton fails, it won't build
-the identity mapping for the original area of the kernel but change to a
-new page table '_pgtable'. Then the kernel will triple fault immediately
-caused by no identity mappings.
-
-The normal kernel won't see this bug, because it comes here via startup_32()
-and CR3 will be set to _pgtable already. In startup_32() the identity
-mapping is built for the 0~4G area. In KASLR we just append to the existing
-area instead of entirely overwriting it for on-demand identity mapping
-building. So the identity mapping for the original area of kernel is still
-there.
-
-To fix it we just switch to the new identity mapping page table when physical
-KASLR succeeds. Otherwise we keep the old page table unchanged just like
-"nokaslr" does.
-
-Signed-off-by: Baoquan He <bhe@redhat.com>
-Signed-off-by: Dave Young <dyoung@redhat.com>
-Acked-by: Kees Cook <keescook@chromium.org>
-Cc: Borislav Petkov <bp@suse.de>
-Cc: Dave Jiang <dave.jiang@intel.com>
-Cc: Linus Torvalds <torvalds@linux-foundation.org>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Thomas Garnier <thgarnie@google.com>
-Cc: Thomas Gleixner <tglx@linutronix.de>
-Cc: Yinghai Lu <yinghai@kernel.org>
-Link: http://lkml.kernel.org/r/1493278940-5885-1-git-send-email-bhe@redhat.com
-Signed-off-by: Ingo Molnar <mingo@kernel.org>
-Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/x86/boot/compressed/kaslr.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c
-index a66854d..af42b4d 100644
---- a/arch/x86/boot/compressed/kaslr.c
-+++ b/arch/x86/boot/compressed/kaslr.c
-@@ -463,10 +463,17 @@ void choose_random_location(unsigned long input,
- add_identity_map(random_addr, output_size);
- *output = random_addr;
- }
-+
-+ /*
-+ * This loads the identity mapping page table.
-+ * This should only be done if a new physical address
-+ * is found for the kernel, otherwise we should keep
-+ * the old page table to make it be like the "nokaslr"
-+ * case.
-+ */
-+ finalize_identity_maps();
- }
-
-- /* This actually loads the identity pagetable on x86_64. */
-- finalize_identity_maps();
-
- /* Pick random virtual address starting from LOAD_PHYSICAL_ADDR. */
- if (IS_ENABLED(CONFIG_X86_64))
---
-2.7.4
-