mtd: docg3: Fix kasprintf() usage
authorRichard Weinberger <richard@nod.at>
Mon, 1 Jun 2015 21:10:53 +0000 (23:10 +0200)
committerBrian Norris <computersforpeace@gmail.com>
Wed, 17 Jun 2015 01:58:47 +0000 (18:58 -0700)
kasprintf() does a dynamic memory allocation and can fail.
We have to handle that case.

Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/devices/docg3.c

index 486936b..5e67b4a 100644 (file)
@@ -1815,7 +1815,7 @@ static void doc_dbg_unregister(struct docg3 *docg3)
  * @chip_id: The chip ID of the supported chip
  * @mtd: The structure to fill
  */
-static void __init doc_set_driver_info(int chip_id, struct mtd_info *mtd)
+static int __init doc_set_driver_info(int chip_id, struct mtd_info *mtd)
 {
        struct docg3 *docg3 = mtd->priv;
        int cfg;
@@ -1828,6 +1828,8 @@ static void __init doc_set_driver_info(int chip_id, struct mtd_info *mtd)
        case DOC_CHIPID_G3:
                mtd->name = kasprintf(GFP_KERNEL, "docg3.%d",
                                      docg3->device_id);
+               if (!mtd->name)
+                       return -ENOMEM;
                docg3->max_block = 2047;
                break;
        }
@@ -1850,6 +1852,8 @@ static void __init doc_set_driver_info(int chip_id, struct mtd_info *mtd)
        mtd->_block_isbad = doc_block_isbad;
        mtd->ecclayout = &docg3_oobinfo;
        mtd->ecc_strength = DOC_ECC_BCH_T;
+
+       return 0;
 }
 
 /**
@@ -1913,7 +1917,9 @@ doc_probe_device(struct docg3_cascade *cascade, int floor, struct device *dev)
                goto nomem4;
        }
 
-       doc_set_driver_info(chip_id, mtd);
+       ret = doc_set_driver_info(chip_id, mtd);
+       if (ret)
+               goto nomem4;
 
        doc_hamming_ecc_init(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ);
        doc_reload_bbt(docg3);