Commit 9c11c61b authored by Joe Thornber's avatar Joe Thornber Committed by Linus Torvalds

[PATCH] dm: check chunksize before allocation

minor change for dm-stripe.c. Tests for correct chunksize before it allocates
the stripe context. [Heinz Mauelshagen]
parent f9114ec4
...@@ -117,6 +117,14 @@ static int stripe_ctr(struct dm_target *ti, int argc, char **argv) ...@@ -117,6 +117,14 @@ static int stripe_ctr(struct dm_target *ti, int argc, char **argv)
return -EINVAL; return -EINVAL;
} }
/*
* chunk_size is a power of two
*/
if (!chunk_size || (chunk_size & (chunk_size - 1))) {
ti->error = "dm-stripe: Invalid chunk size";
return -EINVAL;
}
if (!multiple(ti->len, stripes, &width)) { if (!multiple(ti->len, stripes, &width)) {
ti->error = "dm-stripe: Target length not divisable by " ti->error = "dm-stripe: Target length not divisable by "
"number of stripes"; "number of stripes";
...@@ -134,15 +142,6 @@ static int stripe_ctr(struct dm_target *ti, int argc, char **argv) ...@@ -134,15 +142,6 @@ static int stripe_ctr(struct dm_target *ti, int argc, char **argv)
sc->stripe_width = width; sc->stripe_width = width;
ti->split_io = chunk_size; ti->split_io = chunk_size;
/*
* chunk_size is a power of two
*/
if (!chunk_size || (chunk_size & (chunk_size - 1))) {
ti->error = "dm-stripe: Invalid chunk size";
kfree(sc);
return -EINVAL;
}
sc->chunk_mask = ((sector_t) chunk_size) - 1; sc->chunk_mask = ((sector_t) chunk_size) - 1;
for (sc->chunk_shift = 0; chunk_size; sc->chunk_shift++) for (sc->chunk_shift = 0; chunk_size; sc->chunk_shift++)
chunk_size >>= 1; chunk_size >>= 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment