Load option with short device path for boot vars
authorRaymond Mao <raymond.mao@linaro.org>
Mon, 19 Jun 2023 21:23:01 +0000 (14:23 -0700)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sat, 15 Jul 2023 09:20:41 +0000 (11:20 +0200)
The boot variables automatically generated for removable medias
should be with short form of device path without device nodes.
This is a requirement for the case that a removable media is
plugged into a different port but is still able to work with the
existing boot variables.

Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
lib/efi_loader/efi_bootmgr.c

index 993bb11..a40762c 100644 (file)
@@ -368,6 +368,7 @@ static efi_status_t efi_bootmgr_enumerate_boot_option(struct eficonfig_media_boo
                struct efi_load_option lo;
                char buf[BOOTMENU_DEVICE_NAME_MAX];
                struct efi_device_path *device_path;
+               struct efi_device_path *short_dp;
 
                ret = efi_search_protocol(volume_handles[i], &efi_guid_device_path, &handler);
                if (ret != EFI_SUCCESS)
@@ -384,6 +385,11 @@ static efi_status_t efi_bootmgr_enumerate_boot_option(struct eficonfig_media_boo
                p = dev_name;
                utf8_utf16_strncpy(&p, buf, strlen(buf));
 
+               /* prefer to short form device path */
+               short_dp = efi_dp_shorten(device_path);
+               if (short_dp)
+                       device_path = short_dp;
+
                lo.label = dev_name;
                lo.attributes = LOAD_OPTION_ACTIVE;
                lo.file_path = device_path;