device-dax: fix 'passing zero to ERR_PTR()' warning
authorDan Williams <dan.j.williams@intel.com>
Wed, 12 Jul 2017 20:42:37 +0000 (13:42 -0700)
committerDan Williams <dan.j.williams@intel.com>
Mon, 17 Jul 2017 18:43:58 +0000 (11:43 -0700)
Dan Carpenter reports:

    The patch 7b6be8444e0f: "dax: refactor dax-fs into a generic provider
    of 'struct dax_device' instances" from Apr 11, 2017, leads to the
    following static checker warning:

        drivers/dax/device.c:643 devm_create_dev_dax()
        warn: passing zero to 'ERR_PTR'

Fix the case where we inadvertently leak 0 to ERR_PTR() by setting at
every error case, and make it clear that 'count' is never 0.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/dax/device.c

index 12943d19bfc43ea17e6f2f92419c5a52ffa35f44..44d72e5e64cc2a39c54f4dd3bb951b666ca9e981 100644 (file)
@@ -567,7 +567,10 @@ struct dev_dax *devm_create_dev_dax(struct dax_region *dax_region,
        struct inode *inode;
        struct device *dev;
        struct cdev *cdev;
-       int rc = 0, i;
+       int rc, i;
+
+       if (!count)
+               return ERR_PTR(-EINVAL);
 
        dev_dax = kzalloc(sizeof(*dev_dax) + sizeof(*res) * count, GFP_KERNEL);
        if (!dev_dax)
@@ -598,8 +601,10 @@ struct dev_dax *devm_create_dev_dax(struct dax_region *dax_region,
         * device outside of mmap of the resulting character device.
         */
        dax_dev = alloc_dax(dev_dax, NULL, NULL);
-       if (!dax_dev)
+       if (!dax_dev) {
+               rc = -ENOMEM;
                goto err_dax;
+       }
 
        /* from here on we're committed to teardown via dax_dev_release() */
        dev = &dev_dax->dev;