[PATCH v10 3/4] Boot var automatic management for removable medias

Masahisa Kojima masahisa.kojima at linaro.org
Tue Jul 18 11:03:37 CEST 2023


Hi Raymond,

On Tue, 18 Jul 2023 at 05:23, Raymond Mao <raymond.mao at linaro.org> wrote:
>
> Hi Heinrich,
>
> I run 'make tests' with the patches locally but no errors observed from 'test_signed.py', below are few lines from the output console:
> ```
> test/py/tests/test_efi_secboot/test_signed.py ssssssss                                                                                                                                              [      90%]
> ```

I think the test cases are just skipped, not executed.

I guess that some required packages are missing on the host machine,
such as sbsigntool, efitools and libguestfs-tools.
build-sandbox/test-log.html will help to analyze why the tests are skipped.

The following document describes prerequisites to run python tests.
https://u-boot.readthedocs.io/en/latest/develop/py_testing.html

'make tests' runs many test cases and takes time.
'./test/py/test.py --bd sandbox --build -k efi_secboot' will run only
the efi_secboot test
and it will be useful for debugging purposes.

Thanks,
Masahisa Kojima


>
> Regards,
> Raymond
>
> On Sat, 15 Jul 2023 at 05:19, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> On 7/9/23 10:56, Heinrich Schuchardt wrote:
>> > On 6/19/23 23:23, Raymond Mao wrote:
>> >> 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
>> >>
>> >> Signed-off-by: Raymond Mao <raymond.mao at linaro.org>
>> >> ---
>> >> Changes in v3
>> >> - Split the patch into moving and renaming functions and
>> >>    individual patches for each changed functionality
>> >> Changes in v5
>> >> - Move function call of efi_bootmgr_update_media_device_boot_option()
>> >>    from efi_init_variables() to efi_init_obj_list()
>> >> Changes in v6
>> >> - Revert unrelated changes
>> >> Changes in v7
>> >> - adapt the return code of function
>> >>    efi_bootmgr_update_media_device_boot_option()
>> >> Changes in v8
>> >> - add a note in the commit message for future reference
>> >> Changes in v9
>> >> - amend the note text in the commit message
>> >> - add a TODO comment in 'efi_disk_remove'
>> >> Changes in v10
>> >> - fix typo and build failures with 'CONFIG_CMD_BOOTEFI_BOOTMGR=n'
>> >>
>> >>   lib/efi_loader/efi_disk.c  | 18 ++++++++++++++++++
>> >>   lib/efi_loader/efi_setup.c |  7 +++++++
>> >>   2 files changed, 25 insertions(+)
>> >>
>> >> diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
>> >> index d2256713a8..911a4adfb1 100644
>> >> --- a/lib/efi_loader/efi_disk.c
>> >> +++ b/lib/efi_loader/efi_disk.c
>> >> @@ -687,6 +687,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;
>> >>   }
>> >> @@ -773,6 +780,17 @@ int efi_disk_remove(void *ctx, struct event *event)
>> >>           return efi_disk_delete_part(dev);
>> >>       else
>> >>           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.
>> >> +     */
>> >
>> > As in future we want to integrate more EFI drivers with the driver model
>> > such a status should be in a global variable. It will have to be set in
>> > ExitBootServices() before invoking dm_remove_devices_flags().
>> >
>> > Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> >
>> >> +
>> >>   }
>> >>   /**
>> >> diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
>> >> index 58d4e13402..69c8b27730 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)
>> >
>>
>> This patch leads to a test failure in
>>
>> test/py/tests/test_efi_secboot/test_signed.py::TestEfiSignedImage::test_efi_signed_image_auth2
>>
>> No EFI system partition
>> Failed to persist EFI variables
>>
>> Please, run 'make tests' before resubmitting.
>>
>> Best regards
>>
>> Heinrich


More information about the U-Boot mailing list