efi_loader: Fix efi_exit gd clobbering
Commit f494950b (efi_loader: call __efi_exit_check in efi_exit) added a call to __efi_exit_check inside efi_exit to account for the fact that we're exiting the efi_exit function via a longjmp call. However, __efi_exit_check also swizzles gd to the application gd while the longjmp will put us back into EFI context, so we need the efi (u-boot) gd. This patch fixes that up by explicitly setting gd back to efi_gd before doing the longjmp. It also adds a few comments on why it does that. Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
ae0bd3a983
commit
a148920e12
@ -798,8 +798,15 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
|
||||
EFI_ENTRY("%p, %ld, %ld, %p", image_handle, exit_status,
|
||||
exit_data_size, exit_data);
|
||||
|
||||
/* Make sure entry/exit counts for EFI world cross-overs match */
|
||||
__efi_exit_check();
|
||||
|
||||
/*
|
||||
* But longjmp out with the U-Boot gd, not the application's, as
|
||||
* the other end is a setjmp call inside EFI context.
|
||||
*/
|
||||
efi_restore_gd();
|
||||
|
||||
loaded_image_info->exit_status = exit_status;
|
||||
longjmp(&loaded_image_info->exit_jmp, 1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user