diff options
Diffstat (limited to 'lib/kobject.c')
-rw-r--r-- | lib/kobject.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/kobject.c b/lib/kobject.c index 7a0e6809490d..efe67fa96a71 100644 --- a/lib/kobject.c +++ b/lib/kobject.c | |||
@@ -72,6 +72,8 @@ static int get_kobj_path_length(struct kobject *kobj) | |||
72 | * Add 1 to strlen for leading '/' of each level. | 72 | * Add 1 to strlen for leading '/' of each level. |
73 | */ | 73 | */ |
74 | do { | 74 | do { |
75 | if (kobject_name(parent) == NULL) | ||
76 | return 0; | ||
75 | length += strlen(kobject_name(parent)) + 1; | 77 | length += strlen(kobject_name(parent)) + 1; |
76 | parent = parent->parent; | 78 | parent = parent->parent; |
77 | } while (parent); | 79 | } while (parent); |
@@ -107,6 +109,8 @@ char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask) | |||
107 | int len; | 109 | int len; |
108 | 110 | ||
109 | len = get_kobj_path_length(kobj); | 111 | len = get_kobj_path_length(kobj); |
112 | if (len == 0) | ||
113 | return NULL; | ||
110 | path = kmalloc(len, gfp_mask); | 114 | path = kmalloc(len, gfp_mask); |
111 | if (!path) | 115 | if (!path) |
112 | return NULL; | 116 | return NULL; |
@@ -162,6 +166,11 @@ int kobject_add(struct kobject * kobj) | |||
162 | return -ENOENT; | 166 | return -ENOENT; |
163 | if (!kobj->k_name) | 167 | if (!kobj->k_name) |
164 | kobj->k_name = kobj->name; | 168 | kobj->k_name = kobj->name; |
169 | if (!kobj->k_name) { | ||
170 | pr_debug("kobject attempted to be registered with no name!\n"); | ||
171 | WARN_ON(1); | ||
172 | return -EINVAL; | ||
173 | } | ||
165 | parent = kobject_get(kobj->parent); | 174 | parent = kobject_get(kobj->parent); |
166 | 175 | ||
167 | pr_debug("kobject %s: registering. parent: %s, set: %s\n", | 176 | pr_debug("kobject %s: registering. parent: %s, set: %s\n", |