• Ard Biesheuvel's avatar
    x86/efistub: Omit physical KASLR when memory reservations exist · 15aa8fb8
    Ard Biesheuvel authored
    The legacy decompressor has elaborate logic to ensure that the
    randomized physical placement of the decompressed kernel image does not
    conflict with any memory reservations, including ones specified on the
    command line using mem=, memmap=, efi_fake_mem= or hugepages=, which are
    taken into account by the kernel proper at a later stage.
    
    When booting in EFI mode, it is the firmware's job to ensure that the
    chosen range does not conflict with any memory reservations that it
    knows about, and this is trivially achieved by using the firmware's
    memory allocation APIs.
    
    That leaves reservations specified on the command line, though, which
    the firmware knows nothing about, as these regions have no other special
    significance to the platform. Since commit
    
      a1b87d54 ("x86/efistub: Avoid legacy decompressor when doing EFI boot")
    
    these reservations are not taken into account when randomizing the
    physical placement, which may result in conflicts where the memory
    cannot be reserved by the kernel proper because its own executable image
    resides there.
    
    To avoid having to duplicate or reuse the existing complicated logic,
    disable physical KASLR entirely when such overrides are specified. These
    are mostly diagnostic tools or niche features, and physical KASLR (as
    opposed to virtual KASLR, which is much more important as it affects the
    memory addresses observed by code executing in the kernel) is something
    we can live without.
    
    Closes: https://lkml.kernel.org/r/FA5F6719-8824-4B04-803E-82990E65E627%40akamai.com
    
    Reported-by: default avatarBen Chaney <bchaney@akamai.com>
    Fixes: a1b87d54
    
     ("x86/efistub: Avoid legacy decompressor when doing EFI boot")
    Cc:  <stable@vger.kernel.org> # v6.1+
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    15aa8fb8
x86-stub.c 25.9 KB