[PATCH] efi_loader: capsule: Record capsule result only if capsule is read
Ilias Apalodimas
ilias.apalodimas at linaro.org
Fri Nov 12 14:14:52 CET 2021
Masami-san
On Fri, 12 Nov 2021 at 15:05, Masami Hiramatsu
<masami.hiramatsu at linaro.org> wrote:
>
> Record capsule update result only if the capsule file is
> successfully read, because the capsule GUID is not sure when
> the file can not be read or the file is not a capsule.
> Without this fix, if user puts a dummy (non-capsule) file
> under (ESP)EFI/UpdateCapsule, U-Boot causes a synchronous
> abort.
>
> This also fixes use-after-free bug of the 'capsule' variable.
>
> Fixes: c74cd8bd08d1 ("efi_loader: capsule: add capsule_on_disk support")
> Signed-off-by: Masami Hiramatsu <masami.hiramatsu at linaro.org>
> ---
> lib/efi_loader/efi_capsule.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
> index 850937fd12..502bcfca6e 100644
> --- a/lib/efi_loader/efi_capsule.c
> +++ b/lib/efi_loader/efi_capsule.c
> @@ -1108,13 +1108,13 @@ efi_status_t efi_launch_capsules(void)
> log_err("Applying capsule %ls failed\n",
> files[i]);
>
> + /* create CapsuleXXXX */
> + set_capsule_result(index, capsule, ret);
> +
The fix seems correct, this was probably broken all along since the
code frees the capsule before accessing it, even if it's successfully
read.
> free(capsule);
> } else {
> log_err("Reading capsule %ls failed\n", files[i]);
> }
> - /* create CapsuleXXXX */
> - set_capsule_result(index, capsule, ret);
> -
> /* delete a capsule either in case of success or failure */
> ret = efi_capsule_delete_file(files[i]);
> if (ret != EFI_SUCCESS)
>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list