mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 04:01:48 -04:00
efi: Don't attempt to map RCI2 config table if it doesn't exist
[ Upstream commit a470552ee8965da0fe6fd4df0aa39c4cda652c7c ] Commit:1c5fecb612("efi: Export Runtime Configuration Interface table to sysfs") ... added support for a Dell specific UEFI configuration table, but failed to take into account that mapping the table should not be attempted unless the table actually exists. If it doesn't exist, the code usually fails silently unless pr_debug() prints are enabled. However, on 32-bit PAE x86, the splat below is produced due to the attempt to map the placeholder value EFI_INVALID_TABLE_ADDR which we use for non-existing UEFI configuration tables, and which equals ULONG_MAX. memremap attempted on mixed range 0x00000000ffffffff size: 0x1e WARNING: CPU: 1 PID: 1 at kernel/iomem.c:81 memremap+0x1a3/0x1c0 Modules linked in: CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.4.2-smp-mine #1 Hardware name: Hewlett-Packard HP Z400 Workstation/0B4Ch, BIOS 786G3 v03.61 03/05/2018 EIP: memremap+0x1a3/0x1c0 ... Call Trace: ? map_properties+0x473/0x473 ? efi_rci2_sysfs_init+0x2c/0x154 ? map_properties+0x473/0x473 ? do_one_initcall+0x49/0x1d4 ? parse_args+0x1e8/0x2a0 ? do_early_param+0x7a/0x7a ? kernel_init_freeable+0x139/0x1c2 ? rest_init+0x8e/0x8e ? kernel_init+0xd/0xf2 ? ret_from_fork+0x2e/0x38 Fix this by checking whether the table exists before attempting to map it. Reported-by: Richard Narron <[email protected]> Tested-by: Richard Narron <[email protected]> Signed-off-by: Ard Biesheuvel <[email protected]> Cc: [email protected] Fixes:1c5fecb612("efi: Export Runtime Configuration Interface table to sysfs") Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
This commit is contained in:
parent
735e7a12a6
commit
618ab2e3c1
1 changed files with 3 additions and 0 deletions
|
|
@ -81,6 +81,9 @@ static int __init efi_rci2_sysfs_init(void)
|
|||
struct kobject *tables_kobj;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
if (rci2_table_phys == EFI_INVALID_TABLE_ADDR)
|
||||
return 0;
|
||||
|
||||
rci2_base = memremap(rci2_table_phys,
|
||||
sizeof(struct rci2_table_global_hdr),
|
||||
MEMREMAP_WB);
|
||||
|
|
|
|||
Loading…
Reference in a new issue