summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteffen Trumtrar <s.trumtrar@pengutronix.de>2021-01-11 11:32:05 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2021-01-13 10:03:37 +0100
commit46ea14fc83360b885f9ba0954892694a1102e20e (patch)
tree0caa93c20c567b10493a1a771824f4a593419e36
parent131bac34d2ce9997fe30eeb3bbd361248befc7d1 (diff)
downloadbarebox-46ea14fc83360b885f9ba0954892694a1102e20e.tar.gz
barebox-46ea14fc83360b885f9ba0954892694a1102e20e.tar.xz
image-sparse: change chunk_data_sz to u64
chunk_data_sz is set to the result of a __le32 * __le32 multiplication: chunk_data_sz = si->sparse.blk_sz * si->chunk.chunk_sz; This will overflow. Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--lib/image-sparse.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/image-sparse.c b/lib/image-sparse.c
index 8e7a52fd71..c375c78d63 100644
--- a/lib/image-sparse.c
+++ b/lib/image-sparse.c
@@ -62,7 +62,8 @@ struct sparse_image_ctx {
static int sparse_seek(struct sparse_image_ctx *si)
{
- unsigned int chunk_data_sz, payload;
+ uint64_t chunk_data_sz;
+ unsigned int payload;
loff_t offs;
int ret;
@@ -94,7 +95,7 @@ again:
return -errno;
}
- chunk_data_sz = si->sparse.blk_sz * si->chunk.chunk_sz;
+ chunk_data_sz = (uint64_t) si->sparse.blk_sz * si->chunk.chunk_sz;
payload = si->chunk.total_sz - si->sparse.chunk_hdr_sz;
si->processed_chunks++;