[PATCH] efi_loader: capsule: enforce guid check in api and capsule_on_disk
Michal Simek
michal.simek at amd.com
Thu Jul 27 10:53:44 CEST 2023
On 7/27/23 02:38, AKASHI Takahiro wrote:
> While UPDATE_CAPSULE api is not fully implemented, this interface and
> capsule-on-disk feature should behave in the same way, especially in
> handling an empty capsule for fwu multibank, for future enhancement.
>
> So move the guid check into efi_capsule_update_firmware().
>
> Fixed: commit a6aafce494ab ("efi_loader: use efi_update_capsule_firmware()
> for capsule on disk")
just fyi: b4 mess this.
You should likely put it on the same line and ignore line limit.
This is how this ends up.
handling an empty capsule for fwu multibank, for future enhancement.
So move the guid check into efi_capsule_update_firmware().
for capsule on disk")
Fixed: commit a6aafce494ab ("efi_loader: use efi_update_capsule_firmware()
Reported-by: Michal Simek <michal.simek at amd.com>
Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
Link: https://lore.kernel.org/r/20230727003800.25105-1-takahiro.akashi@linaro.org
> Reported-by: Michal Simek <michal.simek at amd.com>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
> ---
> lib/efi_loader/efi_capsule.c | 17 ++++++++---------
> 1 file changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
> index 7a6f195cbc02..ddf8153e0982 100644
> --- a/lib/efi_loader/efi_capsule.c
> +++ b/lib/efi_loader/efi_capsule.c
> @@ -581,6 +581,13 @@ static efi_status_t efi_capsule_update_firmware(
> fw_accept_os = capsule_data->flags & FW_ACCEPT_OS ? 0x1 : 0x0;
> }
>
> + if (guidcmp(&capsule_data->capsule_guid,
> + &efi_guid_firmware_management_capsule_id)) {
> + log_err("Unsupported capsule type: %pUs\n",
> + &capsule_data->capsule_guid);
> + return EFI_UNSUPPORTED;
> + }
> +
> /* sanity check */
> if (capsule_data->header_size < sizeof(*capsule) ||
> capsule_data->header_size >= capsule_data->capsule_image_size)
> @@ -751,15 +758,7 @@ efi_status_t EFIAPI efi_update_capsule(
>
> log_debug("Capsule[%d] (guid:%pUs)\n",
> i, &capsule->capsule_guid);
> - if (!guidcmp(&capsule->capsule_guid,
> - &efi_guid_firmware_management_capsule_id)) {
> - ret = efi_capsule_update_firmware(capsule);
> - } else {
> - log_err("Unsupported capsule type: %pUs\n",
> - &capsule->capsule_guid);
> - ret = EFI_UNSUPPORTED;
> - }
> -
> + ret = efi_capsule_update_firmware(capsule);
> if (ret != EFI_SUCCESS)
> goto out;
> }
I have no problem with this patch because it works as the previous one. When
commit message is fixed feel free to add
Tested-by: Michal Simek <michal.simek at amd.com>
And regarding empty capsule functionality with A/B.
I boot from A. Download capsules and run disk-update to get to Image B and trial
state and I can download and apply acceptance capsule by hand via efidebug
capsule update <addr>. That works fine for acceptance capsule is reflected via
fwu in mdata.
When I apply revert capsule there is nothing visible in mdata and I think it
should. The only visibility is that it resets to A system. Is this the only
intention of revert capsules?
(keep in mind that I use two images per bank).
Empty capsules are just accepted only in trial state which is understandable.
And I also see that with latest master branch capsule on disk feature is not
working properly. Capsule are not processed at all. Can you please double check it?
Thanks,
Michal
More information about the U-Boot
mailing list