aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaymond Mao <raymond.mao@linaro.org>2024-02-03 08:36:21 -0800
committerTom Rini <trini@konsulko.com>2024-02-29 09:24:22 -0500
commit67254214930cd2cb52279b01690c1f820a7f83db (patch)
tree66583957697b633a9f826a7d3a029ee84606f032
parent1c4751fd1ac7bda72ab72ce352dc9b2131df2807 (diff)
downloadu-boot-67254214930cd2cb52279b01690c1f820a7f83db.zip
u-boot-67254214930cd2cb52279b01690c1f820a7f83db.tar.gz
u-boot-67254214930cd2cb52279b01690c1f820a7f83db.tar.bz2
bloblist: check bloblist with specified buffer size
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>
-rw-r--r--common/bloblist.c2
-rw-r--r--include/bloblist.h9
-rw-r--r--test/bloblist.c2
3 files changed, 7 insertions, 6 deletions
diff --git a/common/bloblist.c b/common/bloblist.c
index 980b1dd..26b0ba3 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 f7e800f..cc78259 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 17d9dd0..7dab9ad 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++;