• Ard Biesheuvel's avatar
    efi/libstub: arm64: Relax 2M alignment again for relocatable kernels · 3a262423
    Ard Biesheuvel authored
    Commit 82046702 ("efi/libstub/arm64: Replace 'preferred' offset with
    alignment check") simplified the way the stub moves the kernel image
    around in memory before booting it, given that a relocatable image does
    not need to be copied to a 2M aligned offset if it was loaded on a 64k
    boundary by EFI.
    
    Commit d32de913 ("efi/arm64: libstub: Deal gracefully with
    EFI_RNG_PROTOCOL failure") inadvertently defeated this logic by
    overriding the value of efi_nokaslr if EFI_RNG_PROTOCOL is not
    available, which was mistaken by the loader logic as an explicit request
    on the part of the user to disable KASLR and any associated relocation
    of an Image not loaded on a 2M boundary.
    
    So let's reinstate this functionality, by capturing the value of
    efi_nokaslr at function entry to choose the minimum alignment.
    
    Fixes: d32de913 ("efi/arm64: libstub: Deal gracefully with EFI_RNG_PROTOCOL failure")
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Tested-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    3a262423
arm64-stub.c 4.57 KB