efi_loader: allow booting from short dev only DP
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sat, 11 Jun 2022 05:22:07 +0000 (05:22 +0000)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 12 Jun 2022 07:17:54 +0000 (09:17 +0200)
Allow booting from a short form device-path without file path, e.g.

    /HD(1,GPT,5ef79931-a1aa-4c70-9d67-611e8f69eafd,0x800,0x1000)

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_loader/efi_bootmgr.c

index 93f6590..9b65f34 100644 (file)
@@ -44,7 +44,7 @@ static const struct efi_runtime_services *rs;
 static
 struct efi_device_path *expand_media_path(struct efi_device_path *device_path)
 {
-       struct efi_device_path *dp, *full_path;
+       struct efi_device_path *dp, *rem, *full_path;
        efi_handle_t handle;
        efi_status_t ret;
 
@@ -57,11 +57,10 @@ struct efi_device_path *expand_media_path(struct efi_device_path *device_path)
         * booting from removable media.
         */
        dp = device_path;
-       ret = EFI_CALL(efi_locate_device_path(
-                               &efi_simple_file_system_protocol_guid,
-                               &dp, &handle));
+       handle = efi_dp_find_obj(dp, &efi_simple_file_system_protocol_guid,
+                                &rem);
        if (ret == EFI_SUCCESS) {
-               if (dp->type == DEVICE_PATH_TYPE_END) {
+               if (rem->type == DEVICE_PATH_TYPE_END) {
                        dp = efi_dp_from_file(NULL, 0,
                                              "/EFI/BOOT/" BOOTEFI_NAME);
                        full_path = efi_dp_append(device_path, dp);