[PATCH] cmd: avb: free partition buffer upon verify completion
Igor Opaniuk
igor.opaniuk at gmail.com
Sun May 10 12:30:53 CEST 2020
Hi Gary,
Thanks for the patch and sorry for a late reply.
On Wed, May 6, 2020 at 5:06 PM Gary Bisson
<gary.bisson at boundarydevices.com> wrote:
>
> Allows to run 'avb verify' multiple times which can be useful after a
> failure to be able to re-flash the partition and try again.
>
> Signed-off-by: Gary Bisson <gary.bisson at boundarydevices.com>
> ---
> Hi,
>
> This was added because of the following scenario:
> 1- fastboot flash boot boot.img
> 2- avb verify
> -> fails because vbmeta wasn't updated
> 3- fastboot flash vbmeta vbmeta.img
> 4- avb verify
> -> fails because it can't allocate memory as previous buffer wasn't
> freed
>
> Let me know if you have any questions.
>
> Regards,
> Gary
> ---
> cmd/avb.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/cmd/avb.c b/cmd/avb.c
> index a4de5c40a2..67154de4e1 100644
> --- a/cmd/avb.c
> +++ b/cmd/avb.c
> @@ -312,6 +312,14 @@ int do_avb_verify_part(cmd_tbl_t *cmdtp, int flag,
> printf("Unknown error occurred\n");
> }
>
> + /* Free image buffers now that verification is complete */
> + if (slot_result != AVB_SLOT_VERIFY_RESULT_ERROR_OOM) {
Freeing out_data can be done not only when res is
AVB_SLOT_VERIFY_RESULT_ERROR_OOM.
For example, in the line 1196 in [1]:
AvbSlotVerifyResult sub_ret = avb_append_options(ops,
slot_data,
&toplevel_vbmeta,
algorithm_type,
hashtree_error_mode);
if (sub_ret != AVB_SLOT_VERIFY_RESULT_OK) {
ret = sub_ret;
goto fail;
}
> + int i;
> + for (i = 0; i < (int)out_data->num_loaded_partitions; i++)
> + if (out_data->loaded_partitions[i].data)
> + free(out_data->loaded_partitions[i].data);
It's better to use avb_slot_verify_data_free() for the whole out_data instead
for proper cleanup. Check how it's done in unittests for libavb [2].
> + }
> +
> return res;
> }
>
> --
> 2.26.2
>
[1] lib/libavb/avb_slot_verify.c
[2] https://android.googlesource.com/platform/external/avb/+/refs/tags/android-9.0.0_r37/test/avb_slot_verify_unittest.cc#156
--
Best regards - Freundliche Grüsse - Meilleures salutations
Igor Opaniuk
mailto: igor.opaniuk at gmail.com
skype: igor.opanyuk
+380 (93) 836 40 67
http://ua.linkedin.com/in/iopaniuk
More information about the U-Boot
mailing list