aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/core.c
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2013-11-21 14:15:48 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-12-08 21:25:10 -0500
commitbbc780f8bab52fef1784151d3c4982cb1143edd2 (patch)
tree01585734243405412fbfb466e0eb6919437c4746 /drivers/base/core.c
parentd0f80f9aadf60adc4caafed0d2b01e79a315ff80 (diff)
driver core: fix device_create() error path
We call put_device() in the error path, which is fine for dev==NULL. However, in case kobject_set_name_vargs() fails, we have dev!=NULL but device_initialized() wasn't called, yet. Fix this by splitting device_register() into explicit calls to device_add() and an early call to device_initialize(). Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/core.c')
-rw-r--r--drivers/base/core.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 67b180d855b2..aab43fbb8336 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -1603,6 +1603,7 @@ device_create_groups_vargs(struct class *class, struct device *parent,
1603 goto error; 1603 goto error;
1604 } 1604 }
1605 1605
1606 device_initialize(dev);
1606 dev->devt = devt; 1607 dev->devt = devt;
1607 dev->class = class; 1608 dev->class = class;
1608 dev->parent = parent; 1609 dev->parent = parent;
@@ -1614,7 +1615,7 @@ device_create_groups_vargs(struct class *class, struct device *parent,
1614 if (retval) 1615 if (retval)
1615 goto error; 1616 goto error;
1616 1617
1617 retval = device_register(dev); 1618 retval = device_add(dev);
1618 if (retval) 1619 if (retval)
1619 goto error; 1620 goto error;
1620 1621