Message ID | 20231016064526.2410856-8-masahisa.kojima@linaro.org |
---|---|
State | New |
Headers | show |
Series | Add EFI HTTP boot support | expand |
Hello, Em seg., 16 de out. de 2023 às 08:47, Masahisa Kojima < masahisa.kojima@linaro.org> escreveu: > From: Raymond Mao <raymond.mao@linaro.org> > > Changes for complying to EFI spec §3.5.1.1 > 'Removable Media Boot Behavior'. > Boot variables can be automatically generated during a removable > media is probed. At the same time, unused boot variables will be > detected and removed. > > Please note that currently the function 'efi_disk_remove' has no > ability to distinguish below two scenarios > a) Unplugging of a removable media under U-Boot > b) U-Boot exiting and booting an OS > Thus currently the boot variables management is not added into > 'efi_disk_remove' to avoid boot options being added/erased > repeatedly under scenario b) during power cycles > See TODO comments under function 'efi_disk_remove' for more details > > The original efi_secboot tests expect that BootOrder EFI variable > is not defined. With this commit, the BootOrder EFI variable is > automatically added when the disk is detected. The original > efi_secboot tests end up with unexpected failure. > The efi_secboot tests need to be modified to explicitly set > the BootOrder EFI variable. > > squashfs ls test is also affected by this modification, need to > clear the previous state before squashfs ls test starts. > > Co-developed-by: Masahisa Kojima <masahisa.kojima@linaro.org> > Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org> > 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_disk.c | 18 ++++++++ > lib/efi_loader/efi_setup.c | 7 ++++ > test/py/tests/test_efi_secboot/test_signed.py | 42 +++++++++---------- > .../test_efi_secboot/test_signed_intca.py | 14 +++---- > .../tests/test_efi_secboot/test_unsigned.py | 14 +++---- > .../test_fs/test_squashfs/test_sqfs_ls.py | 6 +++ > 6 files changed, 66 insertions(+), 35 deletions(-) > > diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c > index f0d76113b0..b808a7fe62 100644 > --- a/lib/efi_loader/efi_disk.c > +++ b/lib/efi_loader/efi_disk.c > @@ -690,6 +690,13 @@ int efi_disk_probe(void *ctx, struct event *event) > return -1; > } > > + /* only do the boot option management when UEFI sub-system is > initialized */ > + if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) && > efi_obj_list_initialized == EFI_SUCCESS) { > + ret = efi_bootmgr_update_media_device_boot_option(); > + if (ret != EFI_SUCCESS) > + return -1; > + } > + > return 0; > } > > @@ -742,6 +749,17 @@ int efi_disk_remove(void *ctx, struct event *event) > dev_tag_del(dev, DM_TAG_EFI); > > return 0; > + > + /* > + * TODO A flag to distinguish below 2 different scenarios of this > + * function call is needed: > + * a) Unplugging of a removable media under U-Boot > + * b) U-Boot exiting and booting an OS > + * In case of scenario a), > efi_bootmgr_update_media_device_boot_option() > + * needs to be invoked here to update the boot options and remove > the > + * unnecessary ones. > + */ > + > } > > /** > diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c > index e6de685e87..37359a77bb 100644 > --- a/lib/efi_loader/efi_setup.c > +++ b/lib/efi_loader/efi_setup.c > @@ -245,6 +245,13 @@ efi_status_t efi_init_obj_list(void) > if (ret != EFI_SUCCESS) > goto out; > > + if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) { > + /* update boot option after variable service initialized */ > + ret = efi_bootmgr_update_media_device_boot_option(); > + if (ret != EFI_SUCCESS) > + goto out; > + } > + > /* Define supported languages */ > ret = efi_init_platform_lang(); > if (ret != EFI_SUCCESS) > diff --git a/test/py/tests/test_efi_secboot/test_signed.py > b/test/py/tests/test_efi_secboot/test_signed.py > index ca52e853d8..2f862a259a 100644 > --- a/test/py/tests/test_efi_secboot/test_signed.py > +++ b/test/py/tests/test_efi_secboot/test_signed.py > @@ -29,7 +29,7 @@ class TestEfiSignedImage(object): > output = u_boot_console.run_command_list([ > 'host bind 0 %s' % disk_img, > 'efidebug boot add -b 1 HELLO1 host 0:1 > /helloworld.efi.signed -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'bootefi bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -37,7 +37,7 @@ class TestEfiSignedImage(object): > # Test Case 1b, run unsigned image if no PK > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi > -s ""', > - 'efidebug boot next 2', > + 'efidebug boot order 2', > 'bootefi bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -59,13 +59,13 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO1 host 0:1 > /helloworld.efi.signed -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 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 -b 2 HELLO2 host 0:1 /helloworld.efi > -s ""', > - 'efidebug boot next 2', > + 'efidebug boot order 2', > 'efidebug test bootmgr']) > assert '\'HELLO2\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -77,12 +77,12 @@ class TestEfiSignedImage(object): > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db']) > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 2', > + 'efidebug boot order 2', > 'efidebug test bootmgr']) > assert '\'HELLO2\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'bootefi bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -105,7 +105,7 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 > /helloworld.efi.signed -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -117,7 +117,7 @@ class TestEfiSignedImage(object): > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db']) > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -143,7 +143,7 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 > /helloworld.efi.signed -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -170,7 +170,7 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 > /helloworld.efi.signed_2sigs -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -181,7 +181,7 @@ class TestEfiSignedImage(object): > 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize db']) > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -193,7 +193,7 @@ class TestEfiSignedImage(object): > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -205,7 +205,7 @@ class TestEfiSignedImage(object): > 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize dbx']) > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -230,7 +230,7 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 > /helloworld.efi.signed_2sigs -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -254,7 +254,7 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 > /helloworld.efi.signed -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'bootefi bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -265,7 +265,7 @@ class TestEfiSignedImage(object): > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -279,7 +279,7 @@ class TestEfiSignedImage(object): > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -307,7 +307,7 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 > /helloworld.efi.signed_2sigs -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -330,7 +330,7 @@ class TestEfiSignedImage(object): > assert 'Failed to set EFI variable' not in ''.join(output) > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 > /helloworld.efi.signed_2sigs -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -349,7 +349,7 @@ class TestEfiSignedImage(object): > output = u_boot_console.run_command_list([ > 'host bind 0 %s' % disk_img, > 'efidebug boot add -b 1 HELLO1 host 0:1 > /helloworld_forged.efi.signed -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert('hELLO, world!' in ''.join(output)) > > @@ -364,7 +364,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 next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert(not 'hELLO, world!' in ''.join(output)) > assert('\'HELLO1\' failed' 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 d8d599d22f..8d9a5f3e7f 100644 > --- a/test/py/tests/test_efi_secboot/test_signed_intca.py > +++ b/test/py/tests/test_efi_secboot/test_signed_intca.py > @@ -40,7 +40,7 @@ class TestEfiSignedImageIntca(object): > > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO_a host 0:1 > /helloworld.efi.signed_a -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO_a\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -49,7 +49,7 @@ class TestEfiSignedImageIntca(object): > # Test Case 1b, signed and authenticated by root CA > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 2 HELLO_ab host 0:1 > /helloworld.efi.signed_ab -s ""', > - 'efidebug boot next 2', > + 'efidebug boot order 2', > 'bootefi bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -71,7 +71,7 @@ class TestEfiSignedImageIntca(object): > > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO_abc host 0:1 > /helloworld.efi.signed_abc -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO_abc\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -81,7 +81,7 @@ class TestEfiSignedImageIntca(object): > output = u_boot_console.run_command_list([ > 'fatload host 0:1 4000000 db_b.auth', > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO_abc\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' in ''.join(output) > @@ -91,7 +91,7 @@ class TestEfiSignedImageIntca(object): > output = u_boot_console.run_command_list([ > 'fatload host 0:1 4000000 db_c.auth', > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -117,7 +117,7 @@ class TestEfiSignedImageIntca(object): > > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO_abc host 0:1 > /helloworld.efi.signed_abc -s ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert 'Hello, world!' in ''.join(output) > # Or, > @@ -129,7 +129,7 @@ class TestEfiSignedImageIntca(object): > output = u_boot_console.run_command_list([ > 'fatload host 0:1 4000000 dbx_c.auth', > 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert '\'HELLO_abc\' failed' in ''.join(output) > assert 'efi_start_image() returned: 26' 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 df63f0df08..7c078f220d 100644 > --- a/test/py/tests/test_efi_secboot/test_unsigned.py > +++ b/test/py/tests/test_efi_secboot/test_unsigned.py > @@ -36,11 +36,11 @@ class TestEfiUnsignedImage(object): > > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s > ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'bootefi bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert 'efi_start_image() returned: 26' in ''.join(output) > assert 'Hello, world!' not in ''.join(output) > @@ -65,7 +65,7 @@ class TestEfiUnsignedImage(object): > > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s > ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'bootefi bootmgr']) > assert 'Hello, world!' in ''.join(output) > > @@ -89,11 +89,11 @@ class TestEfiUnsignedImage(object): > > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s > ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'bootefi bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert 'efi_start_image() returned: 26' in ''.join(output) > assert 'Hello, world!' not in ''.join(output) > @@ -107,11 +107,11 @@ class TestEfiUnsignedImage(object): > > output = u_boot_console.run_command_list([ > 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s > ""', > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'bootefi bootmgr']) > assert '\'HELLO\' failed' in ''.join(output) > output = u_boot_console.run_command_list([ > - 'efidebug boot next 1', > + 'efidebug boot order 1', > 'efidebug test bootmgr']) > assert 'efi_start_image() returned: 26' in ''.join(output) > assert 'Hello, world!' not in ''.join(output) > diff --git a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py > b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py > index 527a556ed8..3b8118104f 100644 > --- a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py > +++ b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py > @@ -118,6 +118,12 @@ def test_sqfs_ls(u_boot_console): > """ > build_dir = u_boot_console.config.build_dir > > + # If the EFI subsystem is enabled, default file(e.g. > EFI/BOOT/BOOTAA64.EFI) > + # is scanned when the new disk is detected. This ends up with the > unexpected > + # output at the first 'sqfsls' command. > + # Clear the previous state. > + u_boot_console.restart_uboot() > + > # setup test environment > check_mksquashfs_version() > generate_sqfs_src_dir(build_dir) > -- > 2.34.1 > > Signed-off-by: Joao Marcos Costa <jmcosta944@gmail.com>
Hello again, Em seg., 16 de out. de 2023 às 09:58, João Marcos Costa < jmcosta944@gmail.com> escreveu: > Hello, > > Em seg., 16 de out. de 2023 às 08:47, Masahisa Kojima < > masahisa.kojima@linaro.org> escreveu: > >> From: Raymond Mao <raymond.mao@linaro.org> >> >> Changes for complying to EFI spec §3.5.1.1 >> 'Removable Media Boot Behavior'. >> Boot variables can be automatically generated during a removable >> media is probed. At the same time, unused boot variables will be >> detected and removed. >> >> Please note that currently the function 'efi_disk_remove' has no >> ability to distinguish below two scenarios >> a) Unplugging of a removable media under U-Boot >> b) U-Boot exiting and booting an OS >> Thus currently the boot variables management is not added into >> 'efi_disk_remove' to avoid boot options being added/erased >> repeatedly under scenario b) during power cycles >> See TODO comments under function 'efi_disk_remove' for more details >> >> The original efi_secboot tests expect that BootOrder EFI variable >> is not defined. With this commit, the BootOrder EFI variable is >> automatically added when the disk is detected. The original >> efi_secboot tests end up with unexpected failure. >> The efi_secboot tests need to be modified to explicitly set >> the BootOrder EFI variable. >> >> squashfs ls test is also affected by this modification, need to >> clear the previous state before squashfs ls test starts. >> >> Co-developed-by: Masahisa Kojima <masahisa.kojima@linaro.org> >> Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org> >> 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> >> --- > > [...] > Signed-off-by: Joao Marcos Costa <jmcosta944@gmail.com> > Sorry for the previous reply containing the wrong tag. Here is my Reviewed-by tag: Reviewed-by: Joao Marcos Costa <jmcosta944@gmail.com> -- Atenciosamente, João Marcos Costa www.linkedin.com/in/jmarcoscosta/ https://github.com/jmarcoscosta
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index f0d76113b0..b808a7fe62 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -690,6 +690,13 @@ int efi_disk_probe(void *ctx, struct event *event) return -1; } + /* only do the boot option management when UEFI sub-system is initialized */ + if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) && efi_obj_list_initialized == EFI_SUCCESS) { + ret = efi_bootmgr_update_media_device_boot_option(); + if (ret != EFI_SUCCESS) + return -1; + } + return 0; } @@ -742,6 +749,17 @@ int efi_disk_remove(void *ctx, struct event *event) dev_tag_del(dev, DM_TAG_EFI); return 0; + + /* + * TODO A flag to distinguish below 2 different scenarios of this + * function call is needed: + * a) Unplugging of a removable media under U-Boot + * b) U-Boot exiting and booting an OS + * In case of scenario a), efi_bootmgr_update_media_device_boot_option() + * needs to be invoked here to update the boot options and remove the + * unnecessary ones. + */ + } /** diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c index e6de685e87..37359a77bb 100644 --- a/lib/efi_loader/efi_setup.c +++ b/lib/efi_loader/efi_setup.c @@ -245,6 +245,13 @@ efi_status_t efi_init_obj_list(void) if (ret != EFI_SUCCESS) goto out; + if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) { + /* update boot option after variable service initialized */ + ret = efi_bootmgr_update_media_device_boot_option(); + if (ret != EFI_SUCCESS) + goto out; + } + /* Define supported languages */ ret = efi_init_platform_lang(); if (ret != EFI_SUCCESS) diff --git a/test/py/tests/test_efi_secboot/test_signed.py b/test/py/tests/test_efi_secboot/test_signed.py index ca52e853d8..2f862a259a 100644 --- a/test/py/tests/test_efi_secboot/test_signed.py +++ b/test/py/tests/test_efi_secboot/test_signed.py @@ -29,7 +29,7 @@ class TestEfiSignedImage(object): output = u_boot_console.run_command_list([ 'host bind 0 %s' % disk_img, 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'bootefi bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -37,7 +37,7 @@ class TestEfiSignedImage(object): # Test Case 1b, run unsigned image if no PK output = u_boot_console.run_command_list([ 'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi -s ""', - 'efidebug boot next 2', + 'efidebug boot order 2', 'bootefi bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -59,13 +59,13 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed -s ""', - 'efidebug boot next 1', + 'efidebug boot order 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 -b 2 HELLO2 host 0:1 /helloworld.efi -s ""', - 'efidebug boot next 2', + 'efidebug boot order 2', 'efidebug test bootmgr']) assert '\'HELLO2\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -77,12 +77,12 @@ class TestEfiSignedImage(object): 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db']) assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 2', + 'efidebug boot order 2', 'efidebug test bootmgr']) assert '\'HELLO2\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'bootefi bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -105,7 +105,7 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -117,7 +117,7 @@ class TestEfiSignedImage(object): 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db']) assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -143,7 +143,7 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -170,7 +170,7 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -181,7 +181,7 @@ class TestEfiSignedImage(object): 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize db']) assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -193,7 +193,7 @@ class TestEfiSignedImage(object): 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -205,7 +205,7 @@ class TestEfiSignedImage(object): 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize dbx']) assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -230,7 +230,7 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -254,7 +254,7 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'bootefi bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -265,7 +265,7 @@ class TestEfiSignedImage(object): 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -279,7 +279,7 @@ class TestEfiSignedImage(object): 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -307,7 +307,7 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -330,7 +330,7 @@ class TestEfiSignedImage(object): assert 'Failed to set EFI variable' not in ''.join(output) output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -349,7 +349,7 @@ class TestEfiSignedImage(object): output = u_boot_console.run_command_list([ 'host bind 0 %s' % disk_img, 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld_forged.efi.signed -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert('hELLO, world!' in ''.join(output)) @@ -364,7 +364,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 next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert(not 'hELLO, world!' in ''.join(output)) assert('\'HELLO1\' failed' 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 d8d599d22f..8d9a5f3e7f 100644 --- a/test/py/tests/test_efi_secboot/test_signed_intca.py +++ b/test/py/tests/test_efi_secboot/test_signed_intca.py @@ -40,7 +40,7 @@ class TestEfiSignedImageIntca(object): output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO_a host 0:1 /helloworld.efi.signed_a -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO_a\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -49,7 +49,7 @@ class TestEfiSignedImageIntca(object): # Test Case 1b, signed and authenticated by root CA output = u_boot_console.run_command_list([ 'efidebug boot add -b 2 HELLO_ab host 0:1 /helloworld.efi.signed_ab -s ""', - 'efidebug boot next 2', + 'efidebug boot order 2', 'bootefi bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -71,7 +71,7 @@ class TestEfiSignedImageIntca(object): output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO_abc\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -81,7 +81,7 @@ class TestEfiSignedImageIntca(object): output = u_boot_console.run_command_list([ 'fatload host 0:1 4000000 db_b.auth', 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO_abc\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' in ''.join(output) @@ -91,7 +91,7 @@ class TestEfiSignedImageIntca(object): output = u_boot_console.run_command_list([ 'fatload host 0:1 4000000 db_c.auth', 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -117,7 +117,7 @@ class TestEfiSignedImageIntca(object): output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert 'Hello, world!' in ''.join(output) # Or, @@ -129,7 +129,7 @@ class TestEfiSignedImageIntca(object): output = u_boot_console.run_command_list([ 'fatload host 0:1 4000000 dbx_c.auth', 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx', - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert '\'HELLO_abc\' failed' in ''.join(output) assert 'efi_start_image() returned: 26' 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 df63f0df08..7c078f220d 100644 --- a/test/py/tests/test_efi_secboot/test_unsigned.py +++ b/test/py/tests/test_efi_secboot/test_unsigned.py @@ -36,11 +36,11 @@ class TestEfiUnsignedImage(object): output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'bootefi bootmgr']) assert '\'HELLO\' failed' in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert 'efi_start_image() returned: 26' in ''.join(output) assert 'Hello, world!' not in ''.join(output) @@ -65,7 +65,7 @@ class TestEfiUnsignedImage(object): output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'bootefi bootmgr']) assert 'Hello, world!' in ''.join(output) @@ -89,11 +89,11 @@ class TestEfiUnsignedImage(object): output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'bootefi bootmgr']) assert '\'HELLO\' failed' in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert 'efi_start_image() returned: 26' in ''.join(output) assert 'Hello, world!' not in ''.join(output) @@ -107,11 +107,11 @@ class TestEfiUnsignedImage(object): output = u_boot_console.run_command_list([ 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', - 'efidebug boot next 1', + 'efidebug boot order 1', 'bootefi bootmgr']) assert '\'HELLO\' failed' in ''.join(output) output = u_boot_console.run_command_list([ - 'efidebug boot next 1', + 'efidebug boot order 1', 'efidebug test bootmgr']) assert 'efi_start_image() returned: 26' in ''.join(output) assert 'Hello, world!' not in ''.join(output) diff --git a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py index 527a556ed8..3b8118104f 100644 --- a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py +++ b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py @@ -118,6 +118,12 @@ def test_sqfs_ls(u_boot_console): """ build_dir = u_boot_console.config.build_dir + # If the EFI subsystem is enabled, default file(e.g. EFI/BOOT/BOOTAA64.EFI) + # is scanned when the new disk is detected. This ends up with the unexpected + # output at the first 'sqfsls' command. + # Clear the previous state. + u_boot_console.restart_uboot() + # setup test environment check_mksquashfs_version() generate_sqfs_src_dir(build_dir)