|
@@ -1467,7 +1467,7 @@ class_dir_create_and_add(struct class *class, struct kobject *parent_kobj)
|
|
|
|
|
|
dir = kzalloc(sizeof(*dir), GFP_KERNEL);
|
|
|
if (!dir)
|
|
|
- return NULL;
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
|
|
|
dir->class = class;
|
|
|
kobject_init(&dir->kobj, &class_dir_ktype);
|
|
@@ -1477,7 +1477,7 @@ class_dir_create_and_add(struct class *class, struct kobject *parent_kobj)
|
|
|
retval = kobject_add(&dir->kobj, parent_kobj, "%s", class->name);
|
|
|
if (retval < 0) {
|
|
|
kobject_put(&dir->kobj);
|
|
|
- return NULL;
|
|
|
+ return ERR_PTR(retval);
|
|
|
}
|
|
|
return &dir->kobj;
|
|
|
}
|
|
@@ -1784,6 +1784,10 @@ int device_add(struct device *dev)
|
|
|
|
|
|
parent = get_device(dev->parent);
|
|
|
kobj = get_device_parent(dev, parent);
|
|
|
+ if (IS_ERR(kobj)) {
|
|
|
+ error = PTR_ERR(kobj);
|
|
|
+ goto parent_error;
|
|
|
+ }
|
|
|
if (kobj)
|
|
|
dev->kobj.parent = kobj;
|
|
|
|
|
@@ -1882,6 +1886,7 @@ done:
|
|
|
kobject_del(&dev->kobj);
|
|
|
Error:
|
|
|
cleanup_glue_dir(dev, glue_dir);
|
|
|
+parent_error:
|
|
|
put_device(parent);
|
|
|
name_error:
|
|
|
kfree(dev->p);
|
|
@@ -2701,6 +2706,11 @@ int device_move(struct device *dev, struct device *new_parent,
|
|
|
device_pm_lock();
|
|
|
new_parent = get_device(new_parent);
|
|
|
new_parent_kobj = get_device_parent(dev, new_parent);
|
|
|
+ if (IS_ERR(new_parent_kobj)) {
|
|
|
+ error = PTR_ERR(new_parent_kobj);
|
|
|
+ put_device(new_parent);
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
|
|
|
pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
|
|
|
__func__, new_parent ? dev_name(new_parent) : "<NULL>");
|