| From 184e4e169141cca09dc26a36cdbeab41e50518cc Mon Sep 17 00:00:00 2001 |
| From: Ard Biesheuvel <ardb@kernel.org> |
| Date: Tue, 24 Dec 2019 14:29:09 +0100 |
| Subject: [PATCH] x86/efistub: Disable paging at mixed mode entry |
| |
| commit 4911ee401b7ceff8f38e0ac597cbf503d71e690c upstream. |
| |
| The EFI mixed mode entry code goes through the ordinary startup_32() |
| routine before jumping into the kernel's EFI boot code in 64-bit |
| mode. The 32-bit startup code must be entered with paging disabled, |
| but this is not documented as a requirement for the EFI handover |
| protocol, and so we should disable paging explicitly when entering |
| the kernel from 32-bit EFI firmware. |
| |
| Signed-off-by: Ard Biesheuvel <ardb@kernel.org> |
| Cc: <stable@vger.kernel.org> |
| Cc: Arvind Sankar <nivedita@alum.mit.edu> |
| Cc: Hans de Goede <hdegoede@redhat.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: linux-efi@vger.kernel.org |
| Link: https://lkml.kernel.org/r/20191224132909.102540-4-ardb@kernel.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S |
| index fafb75c6c592..02ded42e9f66 100644 |
| --- a/arch/x86/boot/compressed/head_64.S |
| +++ b/arch/x86/boot/compressed/head_64.S |
| @@ -244,6 +244,11 @@ ENTRY(efi32_stub_entry) |
| leal efi32_config(%ebp), %eax |
| movl %eax, efi_config(%ebp) |
| |
| + /* Disable paging */ |
| + movl %cr0, %eax |
| + btrl $X86_CR0_PG_BIT, %eax |
| + movl %eax, %cr0 |
| + |
| jmp startup_32 |
| ENDPROC(efi32_stub_entry) |
| #endif |
| -- |
| 2.7.4 |
| |