| From 012f486bfc4784cb80fadd7839c1974f0fcb2803 Mon Sep 17 00:00:00 2001 |
| From: Kairui Song <kasong@redhat.com> |
| Date: Fri, 18 Jan 2019 19:13:08 +0800 |
| Subject: x86/kexec: Don't setup EFI info if EFI runtime is not enabled |
| |
| [ Upstream commit 2aa958c99c7fd3162b089a1a56a34a0cdb778de1 ] |
| |
| Kexec-ing a kernel with "efi=noruntime" on the first kernel's command |
| line causes the following null pointer dereference: |
| |
| BUG: unable to handle kernel NULL pointer dereference at 0000000000000000 |
| #PF error: [normal kernel read fault] |
| Call Trace: |
| efi_runtime_map_copy+0x28/0x30 |
| bzImage64_load+0x688/0x872 |
| arch_kexec_kernel_image_load+0x6d/0x70 |
| kimage_file_alloc_init+0x13e/0x220 |
| __x64_sys_kexec_file_load+0x144/0x290 |
| do_syscall_64+0x55/0x1a0 |
| entry_SYSCALL_64_after_hwframe+0x44/0xa9 |
| |
| Just skip the EFI info setup if EFI runtime services are not enabled. |
| |
| [ bp: Massage commit message. ] |
| |
| Suggested-by: Dave Young <dyoung@redhat.com> |
| Signed-off-by: Kairui Song <kasong@redhat.com> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Acked-by: Dave Young <dyoung@redhat.com> |
| Cc: AKASHI Takahiro <takahiro.akashi@linaro.org> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Cc: bhe@redhat.com |
| Cc: David Howells <dhowells@redhat.com> |
| Cc: erik.schmauss@intel.com |
| Cc: fanc.fnst@cn.fujitsu.com |
| Cc: "H. Peter Anvin" <hpa@zytor.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: kexec@lists.infradead.org |
| Cc: lenb@kernel.org |
| Cc: linux-acpi@vger.kernel.org |
| Cc: Philipp Rudo <prudo@linux.vnet.ibm.com> |
| Cc: rafael.j.wysocki@intel.com |
| Cc: robert.moore@intel.com |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: x86-ml <x86@kernel.org> |
| Cc: Yannik Sembritzki <yannik@sembritzki.me> |
| Link: https://lkml.kernel.org/r/20190118111310.29589-2-kasong@redhat.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/kernel/kexec-bzimage64.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c |
| index 278cd07228dd..9490a2845f14 100644 |
| --- a/arch/x86/kernel/kexec-bzimage64.c |
| +++ b/arch/x86/kernel/kexec-bzimage64.c |
| @@ -167,6 +167,9 @@ setup_efi_state(struct boot_params *params, unsigned long params_load_addr, |
| struct efi_info *current_ei = &boot_params.efi_info; |
| struct efi_info *ei = ¶ms->efi_info; |
| |
| + if (!efi_enabled(EFI_RUNTIME_SERVICES)) |
| + return 0; |
| + |
| if (!current_ei->efi_memmap_size) |
| return 0; |
| |
| -- |
| 2.19.1 |
| |