mtd: nandsim: fix double free
authorshengyong <shengyong1@huawei.com>
Thu, 25 Jun 2015 02:23:14 +0000 (02:23 +0000)
committerBrian Norris <computersforpeace@gmail.com>
Mon, 6 Jul 2015 22:20:10 +0000 (15:20 -0700)
Do not call free_device() in init_nandsim, the caller - ns_init_module -
will take care of that if something goes wrong.

Signed-off-by: Sheng Yong <shengyong1@huawei.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/nand/nandsim.c

index 6a74f62a00337b6093ab1f43d8d441c0605b02c9..95d0cc49cfc2f4e37013f3e1bfc176d3c1b2ec78 100644 (file)
@@ -730,8 +730,7 @@ static int init_nandsim(struct mtd_info *mtd)
        /* Fill the partition_info structure */
        if (parts_num > ARRAY_SIZE(ns->partitions)) {
                NS_ERR("too many partitions.\n");
-               ret = -EINVAL;
-               goto error;
+               return -EINVAL;
        }
        remains = ns->geom.totsz;
        next_offset = 0;
@@ -740,14 +739,12 @@ static int init_nandsim(struct mtd_info *mtd)
 
                if (!part_sz || part_sz > remains) {
                        NS_ERR("bad partition size.\n");
-                       ret = -EINVAL;
-                       goto error;
+                       return -EINVAL;
                }
                ns->partitions[i].name   = get_partition_name(i);
                if (!ns->partitions[i].name) {
                        NS_ERR("unable to allocate memory.\n");
-                       ret = -ENOMEM;
-                       goto error;
+                       return -ENOMEM;
                }
                ns->partitions[i].offset = next_offset;
                ns->partitions[i].size   = part_sz;
@@ -758,14 +755,12 @@ static int init_nandsim(struct mtd_info *mtd)
        if (remains) {
                if (parts_num + 1 > ARRAY_SIZE(ns->partitions)) {
                        NS_ERR("too many partitions.\n");
-                       ret = -EINVAL;
-                       goto error;
+                       return -EINVAL;
                }
                ns->partitions[i].name   = get_partition_name(i);
                if (!ns->partitions[i].name) {
                        NS_ERR("unable to allocate memory.\n");
-                       ret = -ENOMEM;
-                       goto error;
+                       return -ENOMEM;
                }
                ns->partitions[i].offset = next_offset;
                ns->partitions[i].size   = remains;
@@ -793,24 +788,18 @@ static int init_nandsim(struct mtd_info *mtd)
        printk("options: %#x\n",                ns->options);
 
        if ((ret = alloc_device(ns)) != 0)
-               goto error;
+               return ret;
 
        /* Allocate / initialize the internal buffer */
        ns->buf.byte = kmalloc(ns->geom.pgszoob, GFP_KERNEL);
        if (!ns->buf.byte) {
                NS_ERR("init_nandsim: unable to allocate %u bytes for the internal buffer\n",
                        ns->geom.pgszoob);
-               ret = -ENOMEM;
-               goto error;
+               return -ENOMEM;
        }
        memset(ns->buf.byte, 0xFF, ns->geom.pgszoob);
 
        return 0;
-
-error:
-       free_device(ns);
-
-       return ret;
 }
 
 /*