diff options
Diffstat (limited to 'mkfs')
| -rw-r--r-- | mkfs/mkfs.c | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c index 7484618..6ddcdb0 100644 --- a/mkfs/mkfs.c +++ b/mkfs/mkfs.c @@ -50,6 +50,7 @@ static int pack_files(sqfs_data_writer_t *data, fstree_t *fs,  	const char *path;  	char *node_path;  	file_info_t *fi; +	size_t size;  	int ret;  	if (set_working_dir(opt)) @@ -90,8 +91,16 @@ static int pack_files(sqfs_data_writer_t *data, fstree_t *fs,  		if (filesize % opt->cfg.block_size)  			++max_blk_count; -		inode = alloc_flex(sizeof(*inode), sizeof(sqfs_u32), -				   max_blk_count); +		if (SZ_MUL_OV(sizeof(sqfs_u32), max_blk_count, &size) || +		    SZ_ADD_OV(sizeof(*inode), size, &size)) { +			fputs("creating file inode: too many blocks\n", +			      stderr); +			file->destroy(file); +			free(node_path); +			return -1; +		} + +		inode = calloc(1, size);  		if (inode == NULL) {  			perror("creating file inode");  			file->destroy(file); | 
