| From 163456fc9ef0470ee7c441236f2118bce788a1c5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 2 Oct 2019 18:59:04 +0200 |
| Subject: efi/x86: Do not clean dummy variable in kexec path |
| |
| From: Dave Young <dyoung@redhat.com> |
| |
| [ Upstream commit 2ecb7402cfc7f22764e7bbc80790e66eadb20560 ] |
| |
| kexec reboot fails randomly in UEFI based KVM guest. The firmware |
| just resets while calling efi_delete_dummy_variable(); Unfortunately |
| I don't know how to debug the firmware, it is also possible a potential |
| problem on real hardware as well although nobody reproduced it. |
| |
| The intention of the efi_delete_dummy_variable is to trigger garbage collection |
| when entering virtual mode. But SetVirtualAddressMap can only run once |
| for each physical reboot, thus kexec_enter_virtual_mode() is not necessarily |
| a good place to clean a dummy object. |
| |
| Drop the efi_delete_dummy_variable so that kexec reboot can work. |
| |
| Signed-off-by: Dave Young <dyoung@redhat.com> |
| Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Acked-by: Matthew Garrett <mjg59@google.com> |
| Cc: Ben Dooks <ben.dooks@codethink.co.uk> |
| Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> |
| Cc: Jerry Snitselaar <jsnitsel@redhat.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Lukas Wunner <lukas@wunner.de> |
| Cc: Lyude Paul <lyude@redhat.com> |
| Cc: Octavian Purdila <octavian.purdila@intel.com> |
| Cc: Peter Jones <pjones@redhat.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Scott Talbert <swt@techie.net> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: linux-efi@vger.kernel.org |
| Cc: linux-integrity@vger.kernel.org |
| Link: https://lkml.kernel.org/r/20191002165904.8819-8-ard.biesheuvel@linaro.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/platform/efi/efi.c | 3 --- |
| 1 file changed, 3 deletions(-) |
| |
| diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c |
| index a7189a3b4d70f..3304f61538a26 100644 |
| --- a/arch/x86/platform/efi/efi.c |
| +++ b/arch/x86/platform/efi/efi.c |
| @@ -894,9 +894,6 @@ static void __init kexec_enter_virtual_mode(void) |
| |
| if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX)) |
| runtime_code_page_mkexec(); |
| - |
| - /* clean DUMMY object */ |
| - efi_delete_dummy_variable(); |
| #endif |
| } |
| |
| -- |
| 2.20.1 |
| |