[U-Boot] [PATCH v2 1/3] bootefi: allow return without EFI_BOOT_SERVICES.Exit

Alexander Graf agraf at suse.de
Tue Jul 4 07:12:40 UTC 2017



On 03.07.17 22:41, Heinrich Schuchardt wrote:
> The Unified Extensible Firmware Interface Specification, version 2.7,
> defines in chapter 2.1.2 - UEFI Application that an EFI application may
> either directly return or call EFI_BOOT_SERVICES.Exit().
> 
> Unfortunately U-Boot makes the incorrect assumption that
> EFI_BOOT_SERVICES.Exit() is always called.
> 
> So the following application leads to a memory exception on the aarch64
> architecture when returning:
> 
> EFI_STATUS efi_main(
>    EFI_HANDLE handle,
>    EFI_SYSTEM_TABlE systable) {
> 	return EFI_SUCCESS;
> }
> 
> With this patch the entry point is stored in the image handle.
> 
> The new wrapper function do_enter is used to call the EFI entry point.
> 
> Cc: Alexander Graf <agraf at suse.de>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> v2:
>          do not store entry in loaded_image_info but use additonal
>          function parameter as suggested by Alexander
> ---
>   cmd/bootefi.c | 22 +++++++++++++++++-----
>   1 file changed, 17 insertions(+), 5 deletions(-)
> 
> diff --git a/cmd/bootefi.c b/cmd/bootefi.c
> index 771300ee94..f52da205c9 100644
> --- a/cmd/bootefi.c
> +++ b/cmd/bootefi.c
> @@ -147,15 +147,27 @@ static void *copy_fdt(void *fdt)
>   	return new_fdt;
>   }
>   
> +static asmlinkage ulong efi_do_enter(asmlinkage ulong (*entry)(
> +			void *image_handle, struct efi_system_table *st),
> +			void *image_handle, struct efi_system_table *st)

Please put entry as the last argument. That way we don't waste any 
cycles on shuffling around registers between this parameter ordering and 
the eventual call to entry().

If you're interested in what difference it makes, compile both versions 
- one with entry as first and one with entry as last argument and 
compare the objdump -d output.

Otherwise looks good to me. I suppose this is not a critical bug fix, so 
it can wait for U-Boot 2017.09?


Alex


More information about the U-Boot mailing list