From bab5d5107c877a0e4956692ff79ab9e65aa440f5 Mon Sep 17 00:00:00 2001 From: Tomohiro Kusumi Date: Sat, 31 Oct 2015 19:46:22 +0900 Subject: [PATCH] sys/dev/disk/dm: Fix sanity checks for striped target [1/4] Bring sanity checks before kmalloc(). --- .../dm/targets/striped/dm_target_striped.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/sys/dev/disk/dm/targets/striped/dm_target_striped.c b/sys/dev/disk/dm/targets/striped/dm_target_striped.c index 1e5110d6da..94711a2c2f 100644 --- a/sys/dev/disk/dm/targets/striped/dm_target_striped.c +++ b/sys/dev/disk/dm/targets/striped/dm_target_striped.c @@ -73,7 +73,7 @@ dm_target_stripe_init(dm_table_entry_t *table_en, int argc, char **argv) { dm_target_stripe_config_t *tsc; char *arg; - int i, n; + int i, n, chunksize; if (argc < 4) { kprintf("Stripe target takes 4 or more args\n"); @@ -87,19 +87,18 @@ dm_target_stripe_init(dm_table_entry_t *table_en, int argc, char **argv) return ENOTSUP; } - tsc = kmalloc(sizeof(dm_target_stripe_config_t), - M_DMSTRIPE, M_WAITOK | M_ZERO); - tsc->stripe_num = n; - - tsc->stripe_chunksize = atoi64(argv[1]); - if (tsc->stripe_chunksize < 1 || - tsc->stripe_chunksize * DEV_BSIZE > MAXPHYS) { + chunksize = atoi64(argv[1]); + if (chunksize < 1 || chunksize * DEV_BSIZE > MAXPHYS) { kprintf("dm: Error unsupported chunk size %jdKB\n", - (intmax_t)tsc->stripe_chunksize * DEV_BSIZE / 1024); - dm_target_stripe_destroy_config(tsc); + (intmax_t)chunksize * DEV_BSIZE / 1024); return EINVAL; } + tsc = kmalloc(sizeof(dm_target_stripe_config_t), + M_DMSTRIPE, M_WAITOK | M_ZERO); + tsc->stripe_num = n; + tsc->stripe_chunksize = chunksize; + /* * Parse the devices */ -- 2.41.0