diff options
author | Frank Li <Frank.Li@nxp.com> | 2018-10-17 13:58:23 -0500 |
---|---|---|
committer | Frank Li <Frank.Li@nxp.com> | 2018-10-18 10:57:27 -0500 |
commit | 08090670625c4ccf86dbc9157dad4799f3669fb7 (patch) | |
tree | 474fcdc6751c744acd9a079f8123af6c9fc0fa71 /common | |
parent | e9b7faa15914293678a2aa4ff1b4159619eec566 (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.c | 4 |
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: |