Skip to content
  • Ard Biesheuvel's avatar
    arm64: align randomized TEXT_OFFSET on 4 kB boundary · 4190312b
    Ard Biesheuvel authored
    
    
    When booting via UEFI, the kernel Image is loaded at a 4 kB boundary and
    the embedded EFI stub is executed in place. The EFI stub relocates the
    Image to reside TEXT_OFFSET bytes above a 2 MB boundary, and jumps into
    the kernel proper.
    
    In AArch64, PC relative symbol references are emitted using adrp/add or
    adrp/ldr pairs, where the offset into a 4 kB page is resolved using a
    separate :lo12: relocation. This implicitly assumes that the code will
    always be executed at the same relative offset with respect to a 4 kB
    boundary, or the references will point to the wrong address.
    
    This means we should link the kernel at a 4 kB aligned base address in
    order to remain compatible with the base address the UEFI loader uses
    when doing the initial load of Image. So update the code that generates
    TEXT_OFFSET to choose a multiple of 4 kB.
    
    At the same time, update the code so it chooses from the interval [0..2MB)
    as the author originally intended.
    
    Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    4190312b