Commit 993eb48f authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Wolfram Sang

i2c: dev: check return value when calling dev_set_name()

If dev_set_name() fails, the dev_name() is null, check the return
value of dev_set_name() to avoid the null-ptr-deref.

Fixes: 1413ef63 ("i2c: dev: Fix the race between the release of i2c_dev and cdev")
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
parent c60bd968
...@@ -668,16 +668,21 @@ static int i2cdev_attach_adapter(struct device *dev, void *dummy) ...@@ -668,16 +668,21 @@ static int i2cdev_attach_adapter(struct device *dev, void *dummy)
i2c_dev->dev.class = i2c_dev_class; i2c_dev->dev.class = i2c_dev_class;
i2c_dev->dev.parent = &adap->dev; i2c_dev->dev.parent = &adap->dev;
i2c_dev->dev.release = i2cdev_dev_release; i2c_dev->dev.release = i2cdev_dev_release;
dev_set_name(&i2c_dev->dev, "i2c-%d", adap->nr);
res = dev_set_name(&i2c_dev->dev, "i2c-%d", adap->nr);
if (res)
goto err_put_i2c_dev;
res = cdev_device_add(&i2c_dev->cdev, &i2c_dev->dev); res = cdev_device_add(&i2c_dev->cdev, &i2c_dev->dev);
if (res) { if (res)
put_i2c_dev(i2c_dev, false); goto err_put_i2c_dev;
return res;
}
pr_debug("adapter [%s] registered as minor %d\n", adap->name, adap->nr); pr_debug("adapter [%s] registered as minor %d\n", adap->name, adap->nr);
return 0; return 0;
err_put_i2c_dev:
put_i2c_dev(i2c_dev, false);
return res;
} }
static int i2cdev_detach_adapter(struct device *dev, void *dummy) static int i2cdev_detach_adapter(struct device *dev, void *dummy)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment