diff options
Diffstat (limited to 'drivers/md/dm-exception-store.c')
| -rw-r--r-- | drivers/md/dm-exception-store.c | 20 | 
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c index e5de7627c52..932d1b12314 100644 --- a/drivers/md/dm-exception-store.c +++ b/drivers/md/dm-exception-store.c @@ -155,7 +155,8 @@ static int set_chunk_size(struct dm_exception_store *store,  	char *value;  	chunk_size_ulong = simple_strtoul(chunk_size_arg, &value, 10); -	if (*chunk_size_arg == '\0' || *value != '\0') { +	if (*chunk_size_arg == '\0' || *value != '\0' || +	    chunk_size_ulong > UINT_MAX) {  		*error = "Invalid chunk size";  		return -EINVAL;  	} @@ -171,34 +172,35 @@ static int set_chunk_size(struct dm_exception_store *store,  	 */  	chunk_size_ulong = round_up(chunk_size_ulong, PAGE_SIZE >> 9); -	return dm_exception_store_set_chunk_size(store, chunk_size_ulong, +	return dm_exception_store_set_chunk_size(store, +						 (unsigned) chunk_size_ulong,  						 error);  }  int dm_exception_store_set_chunk_size(struct dm_exception_store *store, -				      unsigned long chunk_size_ulong, +				      unsigned chunk_size,  				      char **error)  {  	/* Check chunk_size is a power of 2 */ -	if (!is_power_of_2(chunk_size_ulong)) { +	if (!is_power_of_2(chunk_size)) {  		*error = "Chunk size is not a power of 2";  		return -EINVAL;  	}  	/* Validate the chunk size against the device block size */ -	if (chunk_size_ulong % (bdev_logical_block_size(store->cow->bdev) >> 9)) { +	if (chunk_size % (bdev_logical_block_size(store->cow->bdev) >> 9)) {  		*error = "Chunk size is not a multiple of device blocksize";  		return -EINVAL;  	} -	if (chunk_size_ulong > INT_MAX >> SECTOR_SHIFT) { +	if (chunk_size > INT_MAX >> SECTOR_SHIFT) {  		*error = "Chunk size is too high";  		return -EINVAL;  	} -	store->chunk_size = chunk_size_ulong; -	store->chunk_mask = chunk_size_ulong - 1; -	store->chunk_shift = ffs(chunk_size_ulong) - 1; +	store->chunk_size = chunk_size; +	store->chunk_mask = chunk_size - 1; +	store->chunk_shift = ffs(chunk_size) - 1;  	return 0;  }  |