efi/x86: Avoid physical KASLR on older Dell systems
authorArd Biesheuvel <ardb@kernel.org>
Mon, 11 Dec 2023 09:00:57 +0000 (10:00 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Mon, 11 Dec 2023 16:57:42 +0000 (17:57 +0100)
commit50d7cdf7a9b1ab6f4f74a69c84e974d5dc0c1bf1
tree593f037b7df7c82f7938ff637fd77ade7c0fab4c
parent271f2a4a9576b87ed1f8584909d6d270039e52ea
efi/x86: Avoid physical KASLR on older Dell systems

River reports boot hangs with v6.6 and v6.7, and the bisect points to
commit

  a1b87d54f4e4 ("x86/efistub: Avoid legacy decompressor when doing EFI boot")

which moves the memory allocation and kernel decompression from the
legacy decompressor (which executes *after* ExitBootServices()) to the
EFI stub, using boot services for allocating the memory. The memory
allocation succeeds but the subsequent call to decompress_kernel() never
returns, resulting in a failed boot and a hanging system.

As it turns out, this issue only occurs when physical address
randomization (KASLR) is enabled, and given that this is a feature we
can live without (virtual KASLR is much more important), let's disable
the physical part of KASLR when booting on AMI UEFI firmware claiming to
implement revision v2.0 of the specification (which was released in
2006), as this is the version these systems advertise.

Fixes: a1b87d54f4e4 ("x86/efistub: Avoid legacy decompressor when doing EFI boot")
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218173
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
drivers/firmware/efi/libstub/x86-stub.c