• Ard Biesheuvel's avatar
    efi/libstub/arm64: Avoid image_base value from efi_loaded_image · c2136dce
    Ard Biesheuvel authored
    Commit:
    
      9f922377 ("efi/libstub/arm: Make efi_entry() an ordinary PE/COFF entrypoint")
    
    did some code refactoring to get rid of the EFI entry point assembler
    code, and in the process, it got rid of the assignment of image_addr
    to the value of _text. Instead, it switched to using the image_base
    field of the efi_loaded_image struct provided by UEFI, which should
    contain the same value.
    
    However, Michael reports that this is not the case: older GRUB builds
    corrupt this value in some way, and since we can easily switch back to
    referring to _text to discover this value, let's simply do that.
    
    While at it, fix another issue in commit 9f922377, which may result
    in the unassigned image_addr to be misidentified as the preferred load
    offset of the kernel, which is unlikely but will cause a boot crash if
    it does occur.
    
    Finally, let's add a warning if the _text vs. image_base discrepancy is
    detected, so we can tell more easily how widespread this issue actually
    is.
    Reported-by: default avatarMichael Kelley <mikelley@microsoft.com>
    Tested-by: default avatarMichael Kelley <mikelley@microsoft.com>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-efi@vger.kernel.org
    c2136dce
arm64-stub.c 4.63 KB