For both arm64 and x86, handle and recovery from page faults due to
EFI runtime service, and disable subsequent invoking, we can avoid
crash the whole system when running on buggy EFI firmware, and get
log like this:
kernel: [Firmware Bug]: Unable to handle paging request in EFI runtime service
kernel: CPU: 54 PID: 8 Comm: kworker/u256:0 Kdump: loaded Tainted: G IOE 4.19.90-2112.8.0.0131.oe1.aarch64.debug #66
kernel: Hardware name: O.D.M FT-2500 Platform/T1DMFT-E4 , BIOS KL4.26.ODM.S.032.210904.R 09/04/21 13:28:40
kernel: Workqueue: efi_rts_wq efi_call_rts
kernel: Call trace:
kernel: dump_backtrace+0x0/0x170
kernel: show_stack+0x24/0x30
kernel: dump_stack+0xa4/0xe8
kernel: efi_runtime_fixup_exception+0x74/0x8c
kernel: __do_kernel_fault+0x8c/0x150
kernel: do_page_fault+0x78/0x4c8
kernel: do_translation_fault+0xa8/0xbc
kernel: do_mem_abort+0x50/0xe0
kernel: el1_da+0x20/0x94
kernel: 0x213f0c24
kernel: 0x213f0d64
kernel: 0x213f044c
kernel: 0x213f04b4
kernel: 0x213f0178
kernel: 0x212e0664
kernel: __efi_rt_asm_wrapper+0x50/0x6c
kernel: efi_call_rts+0x414/0x430
kernel: process_one_work+0x1f8/0x490
kernel: worker_thread+0x50/0x4b8
kernel: kthread+0x134/0x138
kernel: ret_from_fork+0x10/0x18
kernel: [Firmware Bug]: Synchronous exception occurred in EFI runtime service get_time()
kernel: rtc-efi rtc-efi: can't read time
kernel: efi: EFI Runtime Services are disabled!
Anders Roxell (1):
efi: Fix build error due to enum collision between efi.h and ima.h
Ard Biesheuvel (1):
arm64: efi: Recover from synchronous exceptions occurring in firmware
Sai Praneeth (2):
efi: Make efi_rts_work accessible to efi page fault handler
efi/x86: Handle page faults occurring while running EFI runtime
services
Sami Tolvanen (1):
arm64: efi: Restore register x18 if it was corrupted
Waiman Long (1):
efi: Fix debugobjects warning on 'efi_rts_work'
arch/arm64/include/asm/efi.h | 9 ++
arch/arm64/kernel/efi-rt-wrapper.S | 46 +++++++++-
arch/arm64/kernel/efi.c | 26 ++++++
arch/arm64/mm/fault.c | 4 +
arch/x86/include/asm/efi.h | 1 +
arch/x86/mm/fault.c | 9 ++
arch/x86/platform/efi/quirks.c | 78 +++++++++++++++++
drivers/firmware/efi/runtime-wrappers.c | 107 +++++++++---------------
include/linux/efi.h | 42 ++++++++++
9 files changed, 252 insertions(+), 70 deletions(-)
--
2.17.1