diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c index 1a5072425c4a..c405d30938f4 100644 --- a/drivers/md/dm-cache-target.c +++ b/drivers/md/dm-cache-target.c @@ -2455,6 +2455,12 @@ static int cache_create(struct cache_args *ca, struct cache **result) ca->metadata_dev = ca->origin_dev = ca->cache_dev = NULL; origin_blocks = cache->origin_sectors = ti->len; + if (cache->origin_sectors >> __ffs(DATA_DEV_BLOCK_SIZE_MAX_SECTORS) > 0) { + r = -EINVAL; + *error = "Origin sectors is too large"; + goto bad; + } + origin_blocks = block_div(origin_blocks, ca->block_size); cache->origin_blocks = to_oblock(origin_blocks);