libnvdimm, namespace: potential NULL deref on allocation error
authorDan Carpenter <dan.carpenter@oracle.com>
Wed, 12 Oct 2016 06:34:29 +0000 (09:34 +0300)
committerDan Williams <dan.j.williams@intel.com>
Wed, 19 Oct 2016 17:35:51 +0000 (10:35 -0700)
If the kcalloc() fails then "devs" can be NULL and we dereference it
checking "devs[i]".

Fixes: 1b40e09a1232 ('libnvdimm: blk labels and namespace instantiation')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/nvdimm/namespace_devs.c

index 3509cff68ef9c73e1c5bfe79829acfc4b4467cdf..abe5c6bc756c255193d803039973971368b9471d 100644 (file)
@@ -2176,12 +2176,14 @@ static struct device **scan_labels(struct nd_region *nd_region)
        return devs;
 
  err:
-       for (i = 0; devs[i]; i++)
-               if (is_nd_blk(&nd_region->dev))
-                       namespace_blk_release(devs[i]);
-               else
-                       namespace_pmem_release(devs[i]);
-       kfree(devs);
+       if (devs) {
+               for (i = 0; devs[i]; i++)
+                       if (is_nd_blk(&nd_region->dev))
+                               namespace_blk_release(devs[i]);
+                       else
+                               namespace_pmem_release(devs[i]);
+               kfree(devs);
+       }
        return NULL;
 }