diff options
author | Raymond Mao <raymond.mao@linaro.org> | 2024-02-03 08:36:21 -0800 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-02-29 09:24:22 -0500 |
commit | 67254214930cd2cb52279b01690c1f820a7f83db (patch) | |
tree | 66583957697b633a9f826a7d3a029ee84606f032 | |
parent | 1c4751fd1ac7bda72ab72ce352dc9b2131df2807 (diff) | |
download | u-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.c | 2 | ||||
-rw-r--r-- | include/bloblist.h | 9 | ||||
-rw-r--r-- | test/bloblist.c | 2 |
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++; |