[PATCH 5/6] efidebug: add multiple device path instances on Boot####
Heinrich Schuchardt
xypron.glpk at gmx.de
Fri Mar 12 17:25:10 CET 2021
On 12.03.21 05:44, AKASHI Takahiro wrote:
> Ilias,
>
> Sorry, but I will have to repeat my question for better understandings.
>
> On Sat, Mar 06, 2021 at 12:23:01AM +0200, Ilias Apalodimas wrote:
>> The UEFI spec allow a packed array of UEFI device paths in the
>> FilePathList[] of an EFI_LOAD_OPTION. The first file path must
>> describe the loaded image but the rest are OS specific.
>>
>> Previous patches parse the device path and try to use the second
>> member of the array as an initrd. So let's modify efidebug slightly
>> and install the second file described in the command line as the
>> initrd device path.
>>
>> Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
>> ---
>> cmd/efidebug.c | 193 ++++++++++++++----
>> doc/board/emulation/qemu_capsule_update.rst | 4 +-
>> doc/uefi/uefi.rst | 2 +-
>> .../test_efi_capsule/test_capsule_firmware.py | 6 +-
>> test/py/tests/test_efi_secboot/test_signed.py | 16 +-
>> .../test_efi_secboot/test_signed_intca.py | 8 +-
>> .../tests/test_efi_secboot/test_unsigned.py | 8 +-
>> 7 files changed, 179 insertions(+), 58 deletions(-)
>>
>> diff --git a/cmd/efidebug.c b/cmd/efidebug.c
>> index bbbcb0a54643..9a1c471a3eaa 100644
>> --- a/cmd/efidebug.c
>> +++ b/cmd/efidebug.c
>> @@ -9,6 +9,8 @@
>> #include <common.h>
>> #include <command.h>
>> #include <efi_dt_fixup.h>
>> +#include <efi_helper.h>
>> +#include <efi_load_initrd.h>
>> #include <efi_loader.h>
>> #include <efi_rng.h>
>> #include <exports.h>
>> @@ -19,6 +21,7 @@
>> #include <part.h>
>> #include <search.h>
>> #include <linux/ctype.h>
>> +#include <linux/err.h>
>>
>> #define BS systab.boottime
>> #define RT systab.runtime
>> @@ -794,6 +797,65 @@ static int do_efi_show_tables(struct cmd_tbl *cmdtp, int flag,
>> return CMD_RET_SUCCESS;
>> }
>>
>> +/**
>> + * add_initrd_instance() - Append a device path to load_options pointing to an
>> + * inirtd
>> + *
>> + * @argc: Number of arguments
>> + * @argv: Argument array
>> + * @file_path Existing device path, the new instance will be appended
>> + * Return: Pointer to the device path or ERR_PTR
>> + *
>> + */
>> +static
>> +struct efi_device_path *add_initrd_instance(const char *dev, const char *part,
>> + const char *file,
>> + const struct efi_device_path *fp,
>> + efi_uintn_t *fp_size)
>> +{
>> + struct efi_device_path *tmp_dp = NULL, *tmp_fp = NULL;
>> + struct efi_device_path *final_fp = NULL, *initrd_dp = NULL;
>> + efi_status_t ret;
>> + const struct efi_initrd_dp id_dp = {
>> + .vendor = {
>> + {
>> + DEVICE_PATH_TYPE_MEDIA_DEVICE,
>> + DEVICE_PATH_SUB_TYPE_VENDOR_PATH,
>> + sizeof(id_dp.vendor),
>> + },
>> + EFI_INITRD_MEDIA_GUID,
>> + },
>> + .end = {
>> + DEVICE_PATH_TYPE_END,
>> + DEVICE_PATH_SUB_TYPE_END,
>> + sizeof(id_dp.end),
>> + }
>> + };
>> +
>> + ret = efi_dp_from_name(dev, part, file, &tmp_dp, &tmp_fp);
>> + if (ret != EFI_SUCCESS) {
>> + printf("Cannot create device path for \"%s %s\"\n", part, file);
>> + goto out;
>> + }
>> +
>> + initrd_dp =
>> + efi_dp_append_instance((const struct efi_device_path *)&id_dp,
>> + tmp_fp);
>> + if (!initrd_dp) {
>> + printf("Cannot append media vendor device path path\n");
>> + goto out;
>> + }
>> + final_fp = efi_dp_concat(fp, initrd_dp);
>> + *fp_size = efi_dp_size(fp) + efi_dp_size(initrd_dp) +
>> + (2 * sizeof(struct efi_device_path));
>> +
>> +out:
>> + efi_free_pool(initrd_dp);
>> + efi_free_pool(tmp_dp);
>> + efi_free_pool(tmp_fp);
>> + return final_fp ? final_fp : ERR_PTR(-EINVAL);
>> +}
>> +
>> /**
>> * do_efi_boot_add() - set UEFI load option
>> *
>> @@ -806,7 +868,9 @@ static int do_efi_show_tables(struct cmd_tbl *cmdtp, int flag,
>> *
>> * Implement efidebug "boot add" sub-command. Create or change UEFI load option.
>> *
>> - * efidebug boot add <id> <label> <interface> <devnum>[:<part>] <file> <options>
>> + * efidebug boot add -b <id> <label> <interface> <devnum>[:<part>] <file>
>> + * -i <file> <interface2> <devnum2>[:<part>] <initrd>
>> + * -s '<options>'
>
> We discussed another syntax:
> efidebug boot add <id> ...
> efidebug boot add-initrd <id> <initrd path>
> (Please don't care detailed syntax for now.)
Thanks for revieweing.
Ilias and I discussed the syntax several times. As Ilias pointed out the
code and the test cases will be a bit simpler if there is only one command.
There are less corner cases that we have to test like what happens if
add-initrd is called without a prior definition of a binary.
I think using multiple commands is harder for the user to comprehend.
Setting the Boot#### variables will typically done from Linux when a new
kernel arrives or by a capsule update. The efidebug command will be less
common.
I prefer to stick with Ilias suggestion.
>
> What is the difficulty that you have had to implement this type of
> interface?
>
> Even if we follow your new syntax,
> Why do we need '-b' option?
> "<id> <label> <interface> <devnum>[:<part>] <file>" are all mandatory arguments,
> aren't they?
Yes, a boot option without binary is not allowable. There is no real
need for '-b'.
We had the same discussion for requiring -bs when setting a variable
with setenv -e which is equally superfluous where you insisted on adding
the parameter for clarity.
Same here. For clarity -b is nice. For code size reduction dropping it
makes sense.
Best regards
Heinrich
>
> -Takahiro Akashi
>
>
>
>> */
>> static int do_efi_boot_add(struct cmd_tbl *cmdtp, int flag,
>> int argc, char *const argv[])
>> @@ -819,55 +883,98 @@ static int do_efi_boot_add(struct cmd_tbl *cmdtp, int flag,
>> size_t label_len, label_len16;
>> u16 *label;
>> struct efi_device_path *device_path = NULL, *file_path = NULL;
>> + struct efi_device_path *final_fp = NULL;
>> struct efi_load_option lo;
>> void *data = NULL;
>> efi_uintn_t size;
>> + efi_uintn_t fp_size;
>> efi_status_t ret;
>> int r = CMD_RET_SUCCESS;
>> -
>> - if (argc < 6 || argc > 7)
>> - return CMD_RET_USAGE;
>> -
>> - id = (int)simple_strtoul(argv[1], &endp, 16);
>> - if (*endp != '\0' || id > 0xffff)
>> - return CMD_RET_USAGE;
>> -
>> - sprintf(var_name, "Boot%04X", id);
>> - p = var_name16;
>> - utf8_utf16_strncpy(&p, var_name, 9);
>> + int i;
>>
>> guid = efi_global_variable_guid;
>>
>> /* attributes */
>> lo.attributes = LOAD_OPTION_ACTIVE; /* always ACTIVE */
>> + lo.optional_data = NULL;
>> + lo.label = NULL;
>>
>> - /* label */
>> - label_len = strlen(argv[2]);
>> - label_len16 = utf8_utf16_strnlen(argv[2], label_len);
>> - label = malloc((label_len16 + 1) * sizeof(u16));
>> - if (!label)
>> - return CMD_RET_FAILURE;
>> - lo.label = label; /* label will be changed below */
>> - utf8_utf16_strncpy(&label, argv[2], label_len);
>> + /* search for -b first since the rest of the arguments depends on that */
>> + for (i = 0; i < argc; i++) {
>> + if (!strcmp(argv[i], "-b")) {
>> + if (argc < i + 5 || lo.label) {
>> + r = CMD_RET_USAGE;
>> + goto out;
>> + }
>> + id = (int)simple_strtoul(argv[i + 1], &endp, 16);
>> + if (*endp != '\0' || id > 0xffff)
>> + return CMD_RET_USAGE;
>> +
>> + sprintf(var_name, "Boot%04X", id);
>> + p = var_name16;
>> + utf8_utf16_strncpy(&p, var_name, 9);
>> +
>> + /* label */
>> + label_len = strlen(argv[i + 2]);
>> + label_len16 = utf8_utf16_strnlen(argv[i + 2], label_len);
>> + label = malloc((label_len16 + 1) * sizeof(u16));
>> + if (!label)
>> + return CMD_RET_FAILURE;
>> + lo.label = label; /* label will be changed below */
>> + utf8_utf16_strncpy(&label, argv[i + 2], label_len);
>> +
>> + /* file path */
>> + ret = efi_dp_from_name(argv[i + 3], argv[i + 4],
>> + argv[i + 5], &device_path,
>> + &file_path);
>> + if (ret != EFI_SUCCESS) {
>> + printf("Cannot create device path for \"%s %s\"\n",
>> + argv[3], argv[4]);
>> + r = CMD_RET_FAILURE;
>> + goto out;
>> + break;
>> + }
>> + fp_size = efi_dp_size(file_path) +
>> + sizeof(struct efi_device_path);
>> + }
>> + }
>>
>> - /* file path */
>> - ret = efi_dp_from_name(argv[3], argv[4], argv[5], &device_path,
>> - &file_path);
>> - if (ret != EFI_SUCCESS) {
>> - printf("Cannot create device path for \"%s %s\"\n",
>> - argv[3], argv[4]);
>> + if (!file_path) {
>> + printf("You need to specify an image before an initrd.\n");
>> r = CMD_RET_FAILURE;
>> goto out;
>> }
>> - lo.file_path = file_path;
>> - lo.file_path_length = efi_dp_size(file_path)
>> - + sizeof(struct efi_device_path); /* for END */
>>
>> - /* optional data */
>> - if (argc == 6)
>> - lo.optional_data = NULL;
>> - else
>> - lo.optional_data = (const u8 *)argv[6];
>> + /* add now add initrd and extra data */
>> + for (i = 0; i < argc; i++) {
>> + if (!strcmp(argv[i], "-i")) {
>> + if (argc < i + 3 || final_fp) {
>> + r = CMD_RET_USAGE;
>> + goto out;
>> + }
>> +
>> + final_fp = add_initrd_instance(argv[i + 1], argv[i + 2],
>> + argv[i + 3], file_path,
>> + &fp_size);
>> + if (IS_ERR(final_fp)) {
>> + r = CMD_RET_FAILURE;
>> + goto out;
>> + }
>> +
>> + /* add_initrd_instance allocates a new device path */
>> + efi_free_pool(file_path);
>> + file_path = final_fp;
>> + } else if (!strcmp(argv[i], "-s")) {
>> + if (argc < i + 1 || lo.optional_data) {
>> + r = CMD_RET_USAGE;
>> + goto out;
>> + }
>> + lo.optional_data = (const u8 *)argv[i + 1];
>> + }
>> + }
>> +
>> + lo.file_path = file_path;
>> + lo.file_path_length = fp_size;
>>
>> size = efi_serialize_load_option(&lo, (u8 **)&data);
>> if (!size) {
>> @@ -951,11 +1058,14 @@ static int do_efi_boot_rm(struct cmd_tbl *cmdtp, int flag,
>> */
>> static void show_efi_boot_opt_data(u16 *varname16, void *data, size_t *size)
>> {
>> + struct efi_device_path *initrd_path = NULL;
>> struct efi_load_option lo;
>> char *label, *p;
>> size_t label_len16, label_len;
>> u16 *dp_str;
>> efi_status_t ret;
>> + efi_uintn_t initrd_dp_size;
>> + const efi_guid_t lf2_initrd_guid = EFI_INITRD_MEDIA_GUID;
>>
>> ret = efi_deserialize_load_option(&lo, data, size);
>> if (ret != EFI_SUCCESS) {
>> @@ -986,6 +1096,14 @@ static void show_efi_boot_opt_data(u16 *varname16, void *data, size_t *size)
>> printf(" file_path: %ls\n", dp_str);
>> efi_free_pool(dp_str);
>>
>> + initrd_path = efi_dp_from_lo(&lo, &initrd_dp_size, lf2_initrd_guid);
>> + if (initrd_path) {
>> + dp_str = efi_dp_str(initrd_path);
>> + printf(" initrd_path: %ls\n", dp_str);
>> + efi_free_pool(dp_str);
>> + efi_free_pool(initrd_path);
>> + }
>> +
>> printf(" data:\n");
>> print_hex_dump(" ", DUMP_PREFIX_OFFSET, 16, 1,
>> lo.optional_data, *size, true);
>> @@ -1555,7 +1673,10 @@ static int do_efidebug(struct cmd_tbl *cmdtp, int flag,
>> static char efidebug_help_text[] =
>> " - UEFI Shell-like interface to configure UEFI environment\n"
>> "\n"
>> - "efidebug boot add <bootid> <label> <interface> <devnum>[:<part>] <file path> [<load options>]\n"
>> + "efidebug boot add "
>> + "-b <bootid> <label> <interface> <devnum>[:<part>] <file path> "
>> + "-i <interface> <devnum>[:<part>] <initrd file path> "
>> + "-s '<optional data>'\n"
>> " - set UEFI BootXXXX variable\n"
>> " <load options> will be passed to UEFI application\n"
>> "efidebug boot rm <bootid#1> [<bootid#2> [<bootid#3> [...]]]\n"
>> @@ -1599,7 +1720,7 @@ static char efidebug_help_text[] =
>> #endif
>>
>> U_BOOT_CMD(
>> - efidebug, 10, 0, do_efidebug,
>> + efidebug, CONFIG_SYS_MAXARGS, 0, do_efidebug,
>> "Configure UEFI environment",
>> efidebug_help_text
>> );
>> diff --git a/doc/board/emulation/qemu_capsule_update.rst b/doc/board/emulation/qemu_capsule_update.rst
>> index 9fec75f8f1c9..33ce4bcd32ea 100644
>> --- a/doc/board/emulation/qemu_capsule_update.rst
>> +++ b/doc/board/emulation/qemu_capsule_update.rst
>> @@ -60,7 +60,7 @@ to be pointing to the EFI System Partition which contains the capsule
>> file. The BootNext, BootXXXX and OsIndications variables can be set
>> using the following commands::
>>
>> - => efidebug boot add 0 Boot0000 virtio 0:1 <capsule_file_name>
>> + => efidebug boot add -b 0 Boot0000 virtio 0:1 <capsule_file_name>
>> => efidebug boot next 0
>> => setenv -e -nv -bs -rt -v OsIndications =0x04
>> => saveenv
>> @@ -198,7 +198,7 @@ command line::
>> 3. Set the following environment and UEFI boot variables
>>
>> => setenv -e -nv -bs -rt -v OsIndications =0x04
>> - => efidebug boot add 0 Boot0000 virtio 0:1 <capsule_file_name>
>> + => efidebug boot add -b 0 Boot0000 virtio 0:1 <capsule_file_name>
>> => efidebug boot next 0
>> => saveenv
>>
>> diff --git a/doc/uefi/uefi.rst b/doc/uefi/uefi.rst
>> index 5a67737c1579..b3494c22e073 100644
>> --- a/doc/uefi/uefi.rst
>> +++ b/doc/uefi/uefi.rst
>> @@ -178,7 +178,7 @@ Now in U-Boot install the keys on your board::
>>
>> Set up boot parameters on your board::
>>
>> - efidebug boot add 1 HELLO mmc 0:1 /helloworld.efi.signed ""
>> + efidebug boot add -b 1 HELLO mmc 0:1 /helloworld.efi.signed ""
>>
>> Now your board can run the signed image via the boot manager (see below).
>> You can also try this sequence by running Pytest, test_efi_secboot,
>> diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware.py b/test/py/tests/test_efi_capsule/test_capsule_firmware.py
>> index f006fa95d650..e8b0a1575453 100644
>> --- a/test/py/tests/test_efi_capsule/test_capsule_firmware.py
>> +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware.py
>> @@ -39,7 +39,7 @@ class TestEfiCapsuleFirmwareFit(object):
>> with u_boot_console.log.section('Test Case 1-a, before reboot'):
>> output = u_boot_console.run_command_list([
>> 'host bind 0 %s' % disk_img,
>> - 'efidebug boot add 1 TEST host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi ""',
>> 'efidebug boot order 1',
>> 'env set -e OsIndications',
>> 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>> @@ -114,7 +114,7 @@ class TestEfiCapsuleFirmwareFit(object):
>> with u_boot_console.log.section('Test Case 2-a, before reboot'):
>> output = u_boot_console.run_command_list([
>> 'host bind 0 %s' % disk_img,
>> - 'efidebug boot add 1 TEST host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi ""',
>> 'efidebug boot order 1',
>> 'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
>> 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>> @@ -188,7 +188,7 @@ class TestEfiCapsuleFirmwareFit(object):
>> with u_boot_console.log.section('Test Case 3-a, before reboot'):
>> output = u_boot_console.run_command_list([
>> 'host bind 0 %s' % disk_img,
>> - 'efidebug boot add 1 TEST host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi ""',
>> 'efidebug boot order 1',
>> 'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
>> 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>> diff --git a/test/py/tests/test_efi_secboot/test_signed.py b/test/py/tests/test_efi_secboot/test_signed.py
>> index 863685e215b7..75f5ea772300 100644
>> --- a/test/py/tests/test_efi_secboot/test_signed.py
>> +++ b/test/py/tests/test_efi_secboot/test_signed.py
>> @@ -28,7 +28,7 @@ class TestEfiSignedImage(object):
>> # Test Case 1a, run signed image if no PK
>> output = u_boot_console.run_command_list([
>> 'host bind 0 %s' % disk_img,
>> - 'efidebug boot add 1 HELLO1 host 0:1 /helloworld.efi.signed ""',
>> + 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed ""',
>> 'efidebug boot next 1',
>> 'bootefi bootmgr'])
>> assert 'Hello, world!' in ''.join(output)
>> @@ -36,7 +36,7 @@ class TestEfiSignedImage(object):
>> with u_boot_console.log.section('Test Case 1b'):
>> # Test Case 1b, run unsigned image if no PK
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 2 HELLO2 host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi ""',
>> 'efidebug boot next 2',
>> 'bootefi bootmgr'])
>> assert 'Hello, world!' in ''.join(output)
>> @@ -58,13 +58,13 @@ class TestEfiSignedImage(object):
>> 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
>> assert 'Failed to set EFI variable' not in ''.join(output)
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO1 host 0:1 /helloworld.efi.signed ""',
>> + 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed ""',
>> 'efidebug boot next 1',
>> 'efidebug test bootmgr'])
>> assert('\'HELLO1\' failed' in ''.join(output))
>> assert('efi_start_image() returned: 26' in ''.join(output))
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 2 HELLO2 host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi ""',
>> 'efidebug boot next 2',
>> 'efidebug test bootmgr'])
>> assert '\'HELLO2\' failed' in ''.join(output)
>> @@ -104,7 +104,7 @@ class TestEfiSignedImage(object):
>> 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
>> assert 'Failed to set EFI variable' not in ''.join(output)
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi.signed ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed ""',
>> 'efidebug boot next 1',
>> 'efidebug test bootmgr'])
>> assert '\'HELLO\' failed' in ''.join(output)
>> @@ -142,7 +142,7 @@ class TestEfiSignedImage(object):
>> 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
>> assert 'Failed to set EFI variable' not in ''.join(output)
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi.signed ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed ""',
>> 'efidebug boot next 1',
>> 'efidebug test bootmgr'])
>> assert '\'HELLO\' failed' in ''.join(output)
>> @@ -169,7 +169,7 @@ class TestEfiSignedImage(object):
>> 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
>> assert 'Failed to set EFI variable' not in ''.join(output)
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi.signed_2sigs ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs ""',
>> 'efidebug boot next 1',
>> 'efidebug test bootmgr'])
>> assert 'Hello, world!' in ''.join(output)
>> @@ -227,7 +227,7 @@ class TestEfiSignedImage(object):
>> 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
>> assert 'Failed to set EFI variable' not in ''.join(output)
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi.signed ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed ""',
>> 'efidebug boot next 1',
>> 'bootefi bootmgr'])
>> assert 'Hello, world!' in ''.join(output)
>> diff --git a/test/py/tests/test_efi_secboot/test_signed_intca.py b/test/py/tests/test_efi_secboot/test_signed_intca.py
>> index 70d6be00e8a8..0849572a5143 100644
>> --- a/test/py/tests/test_efi_secboot/test_signed_intca.py
>> +++ b/test/py/tests/test_efi_secboot/test_signed_intca.py
>> @@ -39,7 +39,7 @@ class TestEfiSignedImageIntca(object):
>> assert 'Failed to set EFI variable' not in ''.join(output)
>>
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO_a host 0:1 /helloworld.efi.signed_a ""',
>> + 'efidebug boot add -b 1 HELLO_a host 0:1 /helloworld.efi.signed_a ""',
>> 'efidebug boot next 1',
>> 'efidebug test bootmgr'])
>> assert '\'HELLO_a\' failed' in ''.join(output)
>> @@ -48,7 +48,7 @@ class TestEfiSignedImageIntca(object):
>> with u_boot_console.log.section('Test Case 1b'):
>> # Test Case 1b, signed and authenticated by root CA
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 2 HELLO_ab host 0:1 /helloworld.efi.signed_ab ""',
>> + 'efidebug boot add -b 2 HELLO_ab host 0:1 /helloworld.efi.signed_ab ""',
>> 'efidebug boot next 2',
>> 'bootefi bootmgr'])
>> assert 'Hello, world!' in ''.join(output)
>> @@ -70,7 +70,7 @@ class TestEfiSignedImageIntca(object):
>> assert 'Failed to set EFI variable' not in ''.join(output)
>>
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc ""',
>> + 'efidebug boot add -b 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc ""',
>> 'efidebug boot next 1',
>> 'efidebug test bootmgr'])
>> assert '\'HELLO_abc\' failed' in ''.join(output)
>> @@ -116,7 +116,7 @@ class TestEfiSignedImageIntca(object):
>> assert 'Failed to set EFI variable' not in ''.join(output)
>>
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc ""',
>> + 'efidebug boot add -b 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc ""',
>> 'efidebug boot next 1',
>> 'efidebug test bootmgr'])
>> assert 'Hello, world!' in ''.join(output)
>> diff --git a/test/py/tests/test_efi_secboot/test_unsigned.py b/test/py/tests/test_efi_secboot/test_unsigned.py
>> index 56f56e19eb84..8e026f7566ad 100644
>> --- a/test/py/tests/test_efi_secboot/test_unsigned.py
>> +++ b/test/py/tests/test_efi_secboot/test_unsigned.py
>> @@ -35,7 +35,7 @@ class TestEfiUnsignedImage(object):
>> assert 'Failed to set EFI variable' not in ''.join(output)
>>
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi ""',
>> 'efidebug boot next 1',
>> 'bootefi bootmgr'])
>> assert '\'HELLO\' failed' in ''.join(output)
>> @@ -64,7 +64,7 @@ class TestEfiUnsignedImage(object):
>> assert 'Failed to set EFI variable' not in ''.join(output)
>>
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi ""',
>> 'efidebug boot next 1',
>> 'bootefi bootmgr'])
>> assert 'Hello, world!' in ''.join(output)
>> @@ -88,7 +88,7 @@ class TestEfiUnsignedImage(object):
>> assert 'Failed to set EFI variable' not in ''.join(output)
>>
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi ""',
>> 'efidebug boot next 1',
>> 'bootefi bootmgr'])
>> assert '\'HELLO\' failed' in ''.join(output)
>> @@ -106,7 +106,7 @@ class TestEfiUnsignedImage(object):
>> assert 'Failed to set EFI variable' not in ''.join(output)
>>
>> output = u_boot_console.run_command_list([
>> - 'efidebug boot add 1 HELLO host 0:1 /helloworld.efi ""',
>> + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi ""',
>> 'efidebug boot next 1',
>> 'bootefi bootmgr'])
>> assert '\'HELLO\' failed' in ''.join(output)
>> --
>> 2.30.1
>>
More information about the U-Boot
mailing list