]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
bloblist: check bloblist with specified buffer size
authorRaymond Mao <raymond.mao@linaro.org>
Sat, 3 Feb 2024 16:36:21 +0000 (08:36 -0800)
committerTom Rini <trini@konsulko.com>
Thu, 29 Feb 2024 14:24:22 +0000 (09:24 -0500)
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@linaro.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
common/bloblist.c
include/bloblist.h
test/bloblist.c

index 980b1ddbcb4f697763fd7b1c70e956a13cc073e5..26b0ba33b11d7ae631b04ec018bfe7ce7fedc5c3 100644 (file)
@@ -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);
index f7e800f6812792e4ca44556056d53cc5c010599b..cc78259e5a912d58b668c52f058d89306b6c7cbb 100644 (file)
@@ -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);
 
index 17d9dd03d07acfaee339b7f58a6f6251886e0103..7dab9addf828b0f176aba41ab65584ab782b9a2b 100644 (file)
@@ -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++;