• Ard Biesheuvel's avatar
    efi/libstub: Use relocated version of kernel's struct screen_info · fc3608aa
    Ard Biesheuvel authored
    In some cases, we expose the kernel's struct screen_info to the EFI stub
    directly, so it gets populated before even entering the kernel.  This
    means the early console is available as soon as the early param parsing
    happens, which is nice. It also means we need two different ways to pass
    this information, as this trick only works if the EFI stub is baked into
    the core kernel image, which is not always the case.
    
    Huacai reports that the preparatory refactoring that was needed to
    implement this alternative method for zboot resulted in a non-functional
    efifb earlycon for other cases as well, due to the reordering of the
    kernel image relocation with the population of the screen_info struct,
    and the latter now takes place after copying the image to its new
    location, which means we copy the old, uninitialized state.
    
    So let's ensure that the same-image version of alloc_screen_info()
    produces the correct screen_info pointer, by taking the displacement of
    the loaded image into account.
    Reported-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    Tested-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    Link: https://lore.kernel.org/linux-efi/20230310021749.921041-1-chenhuacai@loongson.cn/
    Fixes: 42c8ea3d ("efi: libstub: Factor out EFI stub entrypoint into separate file")
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    fc3608aa
arm64-stub.c 4.57 KB