[PATCH v4 2/9] bloblist: check bloblist with specified buffer size

Ilias Apalodimas ilias.apalodimas at linaro.org
Wed Jan 10 15:11:20 CET 2024


Hi Raymond

I think my r-b tag got lost across versions

On Wed, 3 Jan 2024 at 00:13, Raymond Mao <raymond.mao at linaro.org> wrote:
>
> Instead of expecting the bloblist total size to be the same as the
> pre-allocated buffer size, practically we are more interested in
> whether the pre-allocated buffer size is bigger than the bloblist
> total size.
>
> Signed-off-by: Raymond Mao <raymond.mao at linaro.org>
> ---
> Changes in v2
> - New patch file created for v2.
> Changes in v4
> - Update function header of bloblist_check().
>
>  common/bloblist.c  | 2 +-
>  include/bloblist.h | 9 +++++----
>  test/bloblist.c    | 2 +-
>  3 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/common/bloblist.c b/common/bloblist.c
> index acf67304d0..4039eb3a03 100644
> --- a/common/bloblist.c
> +++ b/common/bloblist.c
> @@ -384,7 +384,7 @@ int bloblist_check(ulong addr, uint size)
>                 return log_msg_ret("Bad magic", -ENOENT);
>         if (hdr->version != BLOBLIST_VERSION)
>                 return log_msg_ret("Bad version", -EPROTONOSUPPORT);
> -       if (!hdr->total_size || (size && hdr->total_size != size))
> +       if (!hdr->total_size || (size && hdr->total_size > size))
>                 return log_msg_ret("Bad total size", -EFBIG);
>         if (hdr->used_size > hdr->total_size)
>                 return log_msg_ret("Bad used size", -ENOENT);
> diff --git a/include/bloblist.h b/include/bloblist.h
> index bf9e12ebf8..1906847c15 100644
> --- a/include/bloblist.h
> +++ b/include/bloblist.h
> @@ -348,12 +348,13 @@ int bloblist_new(ulong addr, uint size, uint flags, uint align_log2);
>   * bloblist_check() - Check if a bloblist exists
>   *
>   * @addr: Address of bloblist
> - * @size: Expected size of blobsize, or 0 to detect the size
> + * @size: Reserved space size for blobsize, or 0 to use the total size
>   * Return: 0 if OK, -ENOENT if the magic number doesn't match (indicating that
> - * there problem is no bloblist at the given address), -EPROTONOSUPPORT
> + * there problem is no bloblist at the given address) or any fields for header
> + * size, used size and total size do not match, -EPROTONOSUPPORT
>   * if the version does not match, -EIO if the checksum does not match,
> - * -EFBIG if the expected size does not match the detected size, -ENOSPC
> - * if the size is not large enough to hold the headers
> + * -EFBIG if the reserved space size is small than the total size or total size
> + * is 0
>   */
>  int bloblist_check(ulong addr, uint size);
>
> diff --git a/test/bloblist.c b/test/bloblist.c
> index 17d9dd03d0..7dab9addf8 100644
> --- a/test/bloblist.c
> +++ b/test/bloblist.c
> @@ -207,7 +207,7 @@ static int bloblist_test_checksum(struct unit_test_state *uts)
>         hdr->flags++;
>
>         hdr->total_size--;
> -       ut_asserteq(-EFBIG, bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
> +       ut_asserteq(-EIO, bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
>         hdr->total_size++;
>
>         hdr->spare++;
> --
> 2.25.1
>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>


More information about the U-Boot mailing list