From f1ec8ac84a8540b92a16f187bfa92b2f3c63917e Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 23 Jul 2012 17:09:42 -0700 Subject: [PATCH] libsparse: fix 32 bit overflow when calculating last chunk last_block * s->block_size can overflow when writing large filesystems, cast to 64 bits before multiplying. Change-Id: I3e54097852ce7d0fd271eab53d65e666284898e4 --- libsparse/sparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsparse/sparse.c b/libsparse/sparse.c index 189b4c03e..741e8c6fc 100644 --- a/libsparse/sparse.c +++ b/libsparse/sparse.c @@ -139,7 +139,7 @@ static int write_all_blocks(struct sparse_file *s, struct output_file *out) DIV_ROUND_UP(backed_block_len(bb), s->block_size); } - pad = s->len - last_block * s->block_size; + pad = s->len - (int64_t)last_block * s->block_size; assert(pad >= 0); if (pad > 0) { write_skip_chunk(out, pad);