driver core: fix device_create() error path
authorDavid Herrmann <dh.herrmann@gmail.com>
Thu, 21 Nov 2013 19:15:48 +0000 (20:15 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Dec 2013 02:25:10 +0000 (18:25 -0800)
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>
drivers/base/core.c

index 67b180d855b2c7baf365e5174802581b3c766745..aab43fbb8336fda50f657479e053e724d72d61c2 100644 (file)
@@ -1603,6 +1603,7 @@ device_create_groups_vargs(struct class *class, struct device *parent,
                goto error;
        }
 
+       device_initialize(dev);
        dev->devt = devt;
        dev->class = class;
        dev->parent = parent;
@@ -1614,7 +1615,7 @@ device_create_groups_vargs(struct class *class, struct device *parent,
        if (retval)
                goto error;
 
-       retval = device_register(dev);
+       retval = device_add(dev);
        if (retval)
                goto error;