Merge tag 'efi-2019-07-rc5-2' of git://git.denx.de/u-boot-efi
[platform/kernel/u-boot.git] / lib / efi_loader / efi_boottime.c
index 251dfc4..b26291b 100644 (file)
@@ -1933,16 +1933,19 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
                                                  efi_uintn_t map_key)
 {
        struct efi_event *evt;
+       efi_status_t ret = EFI_SUCCESS;
 
        EFI_ENTRY("%p, %zx", image_handle, map_key);
 
        /* Check that the caller has read the current memory map */
-       if (map_key != efi_memory_map_key)
-               return EFI_INVALID_PARAMETER;
+       if (map_key != efi_memory_map_key) {
+               ret = EFI_INVALID_PARAMETER;
+               goto out;
+       }
 
        /* Check if ExitBootServices has already been called */
        if (!systab.boottime)
-               return EFI_EXIT(EFI_SUCCESS);
+               goto out;
 
        /* Stop all timer related activities */
        timers_enabled = false;
@@ -1990,8 +1993,8 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
        /* Give the payload some time to boot */
        efi_set_watchdog(0);
        WATCHDOG_RESET();
-
-       return EFI_EXIT(EFI_SUCCESS);
+out:
+       return EFI_EXIT(ret);
 }
 
 /**
@@ -2863,6 +2866,9 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
        EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
 
        /* Check parameters */
+       if (image_obj->header.type != EFI_OBJECT_TYPE_LOADED_IMAGE)
+               return EFI_EXIT(EFI_INVALID_PARAMETER);
+
        ret = EFI_CALL(efi_open_protocol(image_handle, &efi_guid_loaded_image,
                                         &info, NULL, NULL,
                                         EFI_OPEN_PROTOCOL_GET_PROTOCOL));