linux/arch/x86/platform/efi
Borislav Petkov 816ef8d7a2 x86/efi: Remove EFI PGD build time checks
With CONFIG_X86_5LEVEL, CONFIG_UBSAN and CONFIG_UBSAN_UNSIGNED_OVERFLOW
enabled, clang fails the build with

  x86_64-linux-ld: arch/x86/platform/efi/efi_64.o: in function `efi_sync_low_kernel_mappings':
  efi_64.c:(.text+0x22c): undefined reference to `__compiletime_assert_354'

which happens due to -fsanitize=unsigned-integer-overflow being enabled:

  -fsanitize=unsigned-integer-overflow: Unsigned integer overflow, where
  the result of an unsigned integer computation cannot be represented
  in its type. Unlike signed integer overflow, this is not undefined
  behavior, but it is often unintentional. This sanitizer does not check
  for lossy implicit conversions performed before such a computation
  (see -fsanitize=implicit-conversion).

and that fires when the (intentional) EFI_VA_START/END defines overflow
an unsigned long, leading to the assertion expressions not getting
optimized away (on GCC they do)...

However, those checks are superfluous: the runtime services mapping
code already makes sure the ranges don't overshoot EFI_VA_END as the
EFI mapping range is hardcoded. On each runtime services call, it is
switched to the EFI-specific PGD and even if mappings manage to escape
that last PGD, this won't remain unnoticed for long.

So rip them out.

See https://github.com/ClangBuiltLinux/linux/issues/256 for more info.

Reported-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Tested-by: Nick Desaulniers <ndesaulniers@google.com>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Link: http://lkml.kernel.org/r/20210107223424.4135538-1-arnd@kernel.org
2021-02-06 13:54:14 +01:00
..
efi_32.c efi/x86: Move 32-bit code into efi_32.c 2020-08-20 11:18:36 +02:00
efi_64.c x86/efi: Remove EFI PGD build time checks 2021-02-06 13:54:14 +01:00
efi_stub_32.S efi/x86: Preserve %ebx correctly in efi_set_virtual_address_map() 2020-03-08 09:58:23 +01:00
efi_stub_64.S x86: Change {JMP,CALL}_NOSPEC argument 2020-04-30 20:14:34 +02:00
efi_thunk_64.S efi/x86: Check number of arguments to variadic functions 2020-01-10 18:55:04 +01:00
efi.c Merge branch 'efi/urgent' into efi/core, to pick up fixes 2020-10-12 13:38:31 +02:00
Makefile efi/x86: Disable instrumentation in the EFI runtime handling code 2020-01-25 10:14:37 +01:00
quirks.c x86/efi: Remove references to no-longer-used efi_have_uv1_memmap() 2020-07-17 16:47:47 +02:00