Patch "x86/efi: Disable runtime services on kexec kernel if booted with efi=old_map" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
x86/efi: Disable runtime services on kexec kernel if booted with efi=old_map
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
x86-efi-disable-runtime-services-on-kexec-kernel-if-booted-with-efi-old_map.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Apr 9 17:09:24 CEST 2018
From: Sai Praneeth <[email protected]>
Date: Fri, 26 May 2017 12:36:49 +0100
Subject: x86/efi: Disable runtime services on kexec kernel if booted with efi=old_map
From: Sai Praneeth <[email protected]>
[ Upstream commit 4e52797d2efefac3271abdc54439a3435abd77b9 ]
Booting kexec kernel with "efi=old_map" in kernel command line hits kernel panic as shown below.
BUG: unable to handle kernel paging request at ffff88007fe78070 IP: virt_efi_set_variable.part.7+0x63/0x1b0 PGD 7ea28067 PUD 7ea2b067 PMD 7ea2d067 PTE 0 [...] Call Trace: virt_efi_set_variable() efi_delete_dummy_variable() efi_enter_virtual_mode() start_kernel() x86_64_start_reservations() x86_64_start_kernel() start_cpu()
[ efi=old_map was never intended to work with kexec. The problem with
using efi=old_map is that the virtual addresses are assigned from the memory region used by other kernel mappings; vmalloc() space. Potentially there could be collisions when booting kexec if something else is mapped at the virtual address we allocated for runtime service regions in the initial boot - Matt Fleming ]
Since kexec was never intended to work with efi=old_map, disable runtime services in kexec if booted with efi=old_map, so that we don't panic.
--- arch/x86/platform/efi/efi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
arch/x86/platform/efi/efi.c +4 -2
@@ -832,9 +832,11 @@ static void __init kexec_enter_virtual_m/* * We don't do virtual mode, since we don't do runtime services, on -* non-native EFI +* non-native EFI. With efi=old_map, we don't do runtime services in +* kexec kernel because in the initial boot something else might +* have been mapped at these virtual addresses. */ -if (!efi_is_native ()) { +if (!efi_is_native () ||efi_enabled (EFI_OLD_MEMMAP )) {efi_memmap_unmap ();clear_bit (EFI_RUNTIME_SERVICES , &efi.flags);return ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/x86-efi-disable-runtime-services-on-kexec-kernel-if-booted-with-efi-old_map.patch