On Mon, 13 Apr 2020 at 23:54, Atish Patra <atishp@xxxxxxxxxxxxxx> wrote: > > On Mon, Apr 13, 2020 at 8:55 AM Ard Biesheuvel <ardb@xxxxxxxxxx> wrote: > > > > On arm64, the kernel image used to be virtually mapped via the linear > > region, making the two mappings correlated in a way that required the > > kernel to be located at the start of the linear region, or the memory > > below would not be accessible. For this reason, the EFI stub loader > > code for arm64 has the notion of a 'preferred offset' for the physical > > placement of the kernel image, and tries to put the kernel there, or > > at least as low as possible in physical memory (unless KASLR is active, > > in which case the placement is randomized) > > > > When KASLR was introduced, the virtual mapping of the kernel was moved > > into the vmalloc region, and now, regardless of whether KASLR support > > is built in or active, the kernel can be placed anywhere in physical > > memory without any detrimental side effects on the linear region. > > > > This means that we can drop the notion of 'preferred offset' entirely, > > and invoke the kernel in place if the PE/COFF loader loaded it at the > > right offset. If not, we can invoke the ordinary UEFI top down page > > allocator to reallocate it elsewhere in memory. By updating the PE/COFF > > metadata, we can inform the PE/COFF loader about the desired alignment, > > making it less likely that we need to move the kernel image in the first > > place. > > > > Ard Biesheuvel (8): > > efi/libstub/random: align allocate size to EFI_ALLOC_ALIGN > > efi/libstub/random: increase random alloc granularity > > efi/libstub/arm64: replace 'preferred' offset with alignment check > > efi/libstub/arm64: simplify randomized loading of kernel image > > efi/libstub/arm64: align PE/COFF sections to segment alignment > > efi/libstub: add API function to allocate aligned memory > > efi/libstub/arm64: switch to ordinary page allocator for kernel image > > efi/libstub: move efi_relocate_kernel() into separate source file > > > > arch/arm64/kernel/efi-header.S | 2 +- > > arch/arm64/kernel/vmlinux.lds.S | 3 +- > > drivers/firmware/efi/libstub/Makefile | 3 +- > > drivers/firmware/efi/libstub/alignedmem.c | 57 ++++++ > > drivers/firmware/efi/libstub/arm64-stub.c | 92 +++------- > > drivers/firmware/efi/libstub/efistub.h | 18 +- > > drivers/firmware/efi/libstub/mem.c | 191 +------------------- > > drivers/firmware/efi/libstub/randomalloc.c | 6 +- > > drivers/firmware/efi/libstub/relocate.c | 174 ++++++++++++++++++ > > 9 files changed, 280 insertions(+), 266 deletions(-) > > create mode 100644 drivers/firmware/efi/libstub/alignedmem.c > > create mode 100644 drivers/firmware/efi/libstub/relocate.c > > > > -- > > 2.17.1 > > > > Oops. I just noticed this series after I sent out a v2. > I see that efi_low_alloc is removed now and the handle_kernel_image is > simplified for arm64. > I will update the risc-v uefi series accordingly. Sorry for the noise. > No worries. And apologies for making this a moving target :-) I realised you will probably need to bring back efi_low_alloc() as a global symbol, as I don't think you will be able to switch to efi_relocate_kernel(). In any case, this series is just set of patches on the list, so feel free to propose changes if they are making your life too difficult.