efi_loader: restrict EFI_LOADER to armv7 and armv8 on ARM
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 17 Nov 2019 09:44:16 +0000 (10:44 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 19 Nov 2019 11:10:22 +0000 (12:10 +0100)
fatload USB was reported to fail on the Sheevaplug. Debugging showed that
this was caused by an incorrect unaligned write to memory in
path_to_uefi().

UEFI on ARM requires that unaligned memory access is enabled.

* ARMv5 does not support unaligned access at all.
* ARMv6 supports unaligned access when we clear the A flag and set the
  U flag.
* On ARMv7 unaligned access is possible when clearing the aligned flag,
  which we do in function allow_unaligned() (arch/arm/cpu/armv7/sctlr.S).
  For none of the other cpus in arch/arm/cpu/ we have implemented a
  similar function.
* ARMv8 allows unaligned access.

Let EFI_LOADER on ARM depend on SYS_CPU=armv7 or SYS_CPU=armv8.

Once we have implemented allow_unaligned() for other ARM CPUs we can add
these to Kconfig.

Reported-by: Gray Remlin <gryrmln@gmail.com>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_loader/Kconfig

index c7027a967653ac7c51482c59cca9ba6d12f8958c..2f40e485ef9b271a4a890fba7b0774bd3a9ecc0c 100644 (file)
@@ -1,6 +1,9 @@
 config EFI_LOADER
        bool "Support running UEFI applications"
-       depends on (ARM || X86 || RISCV || SANDBOX) && OF_LIBFDT
+       depends on OF_LIBFDT && ( \
+               ARM && (SYS_CPU = armv7 || \
+                       SYS_CPU = armv8) || \
+               X86 || RISCV || SANDBOX)
        # We need EFI_STUB_64BIT to be set on x86_64 with EFI_STUB
        depends on !EFI_STUB || !X86_64 || EFI_STUB_64BIT
        # We need EFI_STUB_32BIT to be set on x86_32 with EFI_STUB