linux/drivers/firmware
Ard Biesheuvel dd09fad9d2 efi/x86: Ignore the memory attributes table on i386
Commit:

  3a6b6c6fb2 ("efi: Make EFI_MEMORY_ATTRIBUTES_TABLE initialization common across all architectures")

moved the call to efi_memattr_init() from ARM specific to the generic
EFI init code, in order to be able to apply the restricted permissions
described in that table on x86 as well.

We never enabled this feature fully on i386, and so mapping and
reserving this table is pointless. However, due to the early call to
memblock_reserve(), the memory bookkeeping gets confused to the point
where it produces the splat below when we try to map the memory later
on:

  ------------[ cut here ]------------
  ioremap on RAM at 0x3f251000 - 0x3fa1afff
  WARNING: CPU: 0 PID: 0 at arch/x86/mm/ioremap.c:166 __ioremap_caller ...
  Modules linked in:
  CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.20.0 #48
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
  EIP: __ioremap_caller.constprop.0+0x249/0x260
  Code: 90 0f b7 05 4e 38 40 de 09 45 e0 e9 09 ff ff ff 90 8d 45 ec c6 05 ...
  EAX: 00000029 EBX: 00000000 ECX: de59c228 EDX: 00000001
  ESI: 3f250fff EDI: 00000000 EBP: de3edf20 ESP: de3edee0
  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00200296
  CR0: 80050033 CR2: ffd17000 CR3: 1e58c000 CR4: 00040690
  Call Trace:
   ioremap_cache+0xd/0x10
   ? old_map_region+0x72/0x9d
   old_map_region+0x72/0x9d
   efi_map_region+0x8/0xa
   efi_enter_virtual_mode+0x260/0x43b
   start_kernel+0x329/0x3aa
   i386_start_kernel+0xa7/0xab
   startup_32_smp+0x164/0x168
  ---[ end trace e15ccf6b9f356833 ]---

Let's work around this by disregarding the memory attributes table
altogether on i386, which does not result in a loss of functionality
or protection, given that we never consumed the contents.

Fixes: 3a6b6c6fb2 ("efi: Make EFI_MEMORY_ATTRIBUTES_TABLE ... ")
Tested-by: Arvind Sankar <nivedita@alum.mit.edu>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20200304165917.5893-1-ardb@kernel.org
Link: https://lore.kernel.org/r/20200308080859.21568-21-ardb@kernel.org
2020-03-08 09:58:23 +01:00
..
arm_scmi drivers: firmware: scmi: Extend SCMI transport layer by trace events 2019-12-30 12:34:37 +00:00
broadcom ioremap changes for 5.6 2020-01-27 13:03:00 -08:00
efi efi/x86: Ignore the memory attributes table on i386 2020-03-08 09:58:23 +01:00
google firmware: google: Probe for a GSMI handler in firmware 2020-01-14 21:46:48 +01:00
imx firmware: imx: Allow IMX DSP to be selected as module 2020-01-09 17:21:33 +08:00
meson firmware: meson_sm: use %*ph to print small buffer 2019-10-03 08:43:33 -07:00
psci firmware: psci: Export functions to manage the OSI mode 2020-01-02 16:49:59 +01:00
tegra firmware: tegra: Move BPMP resume to noirq phase 2019-10-01 16:38:45 +02:00
xilinx ARM: SoC-related driver updates 2020-02-08 14:04:19 -08:00
arm_scpi.c firmware: arm_scpi: convert platform driver to use dev_groups 2019-08-02 13:18:42 +02:00
arm_sdei.c firmware: arm_sdei: use common SMCCC_CONDUIT_* 2019-10-14 10:55:14 +01:00
dmi_scan.c firmware: dmi: Add dmi_memdev_handle 2019-12-03 11:20:37 +01:00
dmi-id.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 191 2019-05-30 11:29:21 -07:00
dmi-sysfs.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
edd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287 2019-06-05 17:36:37 +02:00
iscsi_ibft_find.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287 2019-06-05 17:36:37 +02:00
iscsi_ibft.c iscsi_ibft: Don't limits Targets and NICs to two 2020-01-12 13:16:04 -05:00
Kconfig firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
Makefile firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
memmap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287 2019-06-05 17:36:37 +02:00
pcdp.c efi/ia64: Move HCDP and MPS table handling into IA64 arch code 2020-02-23 21:59:42 +01:00
pcdp.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
qcom_scm-legacy.c firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qcom_scm-smc.c firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qcom_scm.c firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qcom_scm.h firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qemu_fw_cfg.c media: headers: fix linux/mod_devicetable.h inclusions 2018-08-02 18:30:54 -04:00
raspberrypi.c firmware: raspberrypi: register clk device 2019-06-25 16:04:26 -07:00
scpi_pm_domain.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
stratix10-rsu.c firmware: Fix incompatible function behavior for RSU driver 2019-11-14 13:11:32 +08:00
stratix10-svc.c firmware: stratix10-svc: Remove unneeded semicolon 2020-01-14 21:46:48 +01:00
ti_sci.c firmware: ti_sci: Allow for device shared and exclusive requests 2019-09-04 20:44:33 +02:00
ti_sci.h ARM: SoC-related driver updates 2019-07-19 17:13:56 -07:00
trusted_foundations.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
turris-mox-rwtm.c firmware: turris-mox-rwtm: small white space cleanup 2020-01-08 10:35:23 +01:00