Re: [PATCH v2 0/8] efi/libstub: simplify arm64 kernel image loading

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

--
Regards,
Atish



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux