summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorFrank Li <Frank.Li@nxp.com>2018-10-17 13:58:23 -0500
committerFrank Li <Frank.Li@nxp.com>2018-10-18 10:57:27 -0500
commit08090670625c4ccf86dbc9157dad4799f3669fb7 (patch)
tree474fcdc6751c744acd9a079f8123af6c9fc0fa71 /common
parente9b7faa15914293678a2aa4ff1b4159619eec566 (diff)
MLK-19969 fastboot: write to wrong position when size bigger than 4GB
chunk_data_sz = sparse_header->blk_sz * chunk_header->chunk_sz; All is uint32. chunk_data_sz may be bigger than 4G. Change chunk_data_sz to 64bit. force chunk_header->chunk_sz and sparse_header->blk_sz to 64bit. Signed-off-by: Frank Li <Frank.Li@nxp.com> Acked-by: Ye Li <Ye.Li@nxp.com>
Diffstat (limited to 'common')
-rw-r--r--common/image-sparse.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/common/image-sparse.c b/common/image-sparse.c
index ddf5772cf8..86ff5a04bb 100644
--- a/common/image-sparse.c
+++ b/common/image-sparse.c
@@ -59,7 +59,7 @@ void write_sparse_image(
uint32_t bytes_written = 0;
unsigned int chunk;
unsigned int offset;
- unsigned int chunk_data_sz;
+ uint64_t chunk_data_sz;
uint32_t *fill_buf = NULL;
uint32_t fill_val;
sparse_header_t *sparse_header;
@@ -130,7 +130,7 @@ void write_sparse_image(
sizeof(chunk_header_t));
}
- chunk_data_sz = sparse_header->blk_sz * chunk_header->chunk_sz;
+ chunk_data_sz = (uint64_t)sparse_header->blk_sz * (uint64_t)chunk_header->chunk_sz;
blkcnt = chunk_data_sz / info->blksz;
switch (chunk_header->chunk_type) {
case CHUNK_TYPE_RAW: