xref: /linux/lib/kobject.c (revision c484a6783d2b800ebbb110b28b0d96444f8b81ca)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * kobject.c - library routines for handling generic kernel objects
4  *
5  * Copyright (c) 2002-2003 Patrick Mochel <mochel@osdl.org>
6  * Copyright (c) 2006-2007 Greg Kroah-Hartman <greg@kroah.com>
7  * Copyright (c) 2006-2007 Novell Inc.
8  *
9  * Please see the file Documentation/kobject.txt for critical information
10  * about using the kobject interface.
11  */
12 
13 #include <linux/kobject.h>
14 #include <linux/string.h>
15 #include <linux/export.h>
16 #include <linux/stat.h>
17 #include <linux/slab.h>
18 #include <linux/random.h>
19 
20 /**
21  * kobject_namespace - return @kobj's namespace tag
22  * @kobj: kobject in question
23  *
24  * Returns namespace tag of @kobj if its parent has namespace ops enabled
25  * and thus @kobj should have a namespace tag associated with it.  Returns
26  * %NULL otherwise.
27  */
28 const void *kobject_namespace(struct kobject *kobj)
29 {
30 	const struct kobj_ns_type_operations *ns_ops = kobj_ns_ops(kobj);
31 
32 	if (!ns_ops || ns_ops->type == KOBJ_NS_TYPE_NONE)
33 		return NULL;
34 
35 	return kobj->ktype->namespace(kobj);
36 }
37 
38 /**
39  * kobject_get_ownership - get sysfs ownership data for @kobj
40  * @kobj: kobject in question
41  * @uid: kernel user ID for sysfs objects
42  * @gid: kernel group ID for sysfs objects
43  *
44  * Returns initial uid/gid pair that should be used when creating sysfs
45  * representation of given kobject. Normally used to adjust ownership of
46  * objects in a container.
47  */
48 void kobject_get_ownership(struct kobject *kobj, kuid_t *uid, kgid_t *gid)
49 {
50 	*uid = GLOBAL_ROOT_UID;
51 	*gid = GLOBAL_ROOT_GID;
52 
53 	if (kobj->ktype->get_ownership)
54 		kobj->ktype->get_ownership(kobj, uid, gid);
55 }
56 
57 /*
58  * populate_dir - populate directory with attributes.
59  * @kobj: object we're working on.
60  *
61  * Most subsystems have a set of default attributes that are associated
62  * with an object that registers with them.  This is a helper called during
63  * object registration that loops through the default attributes of the
64  * subsystem and creates attributes files for them in sysfs.
65  */
66 static int populate_dir(struct kobject *kobj)
67 {
68 	struct kobj_type *t = get_ktype(kobj);
69 	struct attribute *attr;
70 	int error = 0;
71 	int i;
72 
73 	if (t && t->default_attrs) {
74 		for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) {
75 			error = sysfs_create_file(kobj, attr);
76 			if (error)
77 				break;
78 		}
79 	}
80 	return error;
81 }
82 
83 static int create_dir(struct kobject *kobj)
84 {
85 	const struct kobj_type *ktype = get_ktype(kobj);
86 	const struct kobj_ns_type_operations *ops;
87 	int error;
88 
89 	error = sysfs_create_dir_ns(kobj, kobject_namespace(kobj));
90 	if (error)
91 		return error;
92 
93 	error = populate_dir(kobj);
94 	if (error) {
95 		sysfs_remove_dir(kobj);
96 		return error;
97 	}
98 
99 	if (ktype) {
100 		error = sysfs_create_groups(kobj, ktype->default_groups);
101 		if (error) {
102 			sysfs_remove_dir(kobj);
103 			return error;
104 		}
105 	}
106 
107 	/*
108 	 * @kobj->sd may be deleted by an ancestor going away.  Hold an
109 	 * extra reference so that it stays until @kobj is gone.
110 	 */
111 	sysfs_get(kobj->sd);
112 
113 	/*
114 	 * If @kobj has ns_ops, its children need to be filtered based on
115 	 * their namespace tags.  Enable namespace support on @kobj->sd.
116 	 */
117 	ops = kobj_child_ns_ops(kobj);
118 	if (ops) {
119 		BUG_ON(ops->type <= KOBJ_NS_TYPE_NONE);
120 		BUG_ON(ops->type >= KOBJ_NS_TYPES);
121 		BUG_ON(!kobj_ns_type_registered(ops->type));
122 
123 		sysfs_enable_ns(kobj->sd);
124 	}
125 
126 	return 0;
127 }
128 
129 static int get_kobj_path_length(struct kobject *kobj)
130 {
131 	int length = 1;
132 	struct kobject *parent = kobj;
133 
134 	/* walk up the ancestors until we hit the one pointing to the
135 	 * root.
136 	 * Add 1 to strlen for leading '/' of each level.
137 	 */
138 	do {
139 		if (kobject_name(parent) == NULL)
140 			return 0;
141 		length += strlen(kobject_name(parent)) + 1;
142 		parent = parent->parent;
143 	} while (parent);
144 	return length;
145 }
146 
147 static void fill_kobj_path(struct kobject *kobj, char *path, int length)
148 {
149 	struct kobject *parent;
150 
151 	--length;
152 	for (parent = kobj; parent; parent = parent->parent) {
153 		int cur = strlen(kobject_name(parent));
154 		/* back up enough to print this name with '/' */
155 		length -= cur;
156 		memcpy(path + length, kobject_name(parent), cur);
157 		*(path + --length) = '/';
158 	}
159 
160 	pr_debug("kobject: '%s' (%p): %s: path = '%s'\n", kobject_name(kobj),
161 		 kobj, __func__, path);
162 }
163 
164 /**
165  * kobject_get_path - generate and return the path associated with a given kobj and kset pair.
166  *
167  * @kobj:	kobject in question, with which to build the path
168  * @gfp_mask:	the allocation type used to allocate the path
169  *
170  * The result must be freed by the caller with kfree().
171  */
172 char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask)
173 {
174 	char *path;
175 	int len;
176 
177 	len = get_kobj_path_length(kobj);
178 	if (len == 0)
179 		return NULL;
180 	path = kzalloc(len, gfp_mask);
181 	if (!path)
182 		return NULL;
183 	fill_kobj_path(kobj, path, len);
184 
185 	return path;
186 }
187 EXPORT_SYMBOL_GPL(kobject_get_path);
188 
189 /* add the kobject to its kset's list */
190 static void kobj_kset_join(struct kobject *kobj)
191 {
192 	if (!kobj->kset)
193 		return;
194 
195 	kset_get(kobj->kset);
196 	spin_lock(&kobj->kset->list_lock);
197 	list_add_tail(&kobj->entry, &kobj->kset->list);
198 	spin_unlock(&kobj->kset->list_lock);
199 }
200 
201 /* remove the kobject from its kset's list */
202 static void kobj_kset_leave(struct kobject *kobj)
203 {
204 	if (!kobj->kset)
205 		return;
206 
207 	spin_lock(&kobj->kset->list_lock);
208 	list_del_init(&kobj->entry);
209 	spin_unlock(&kobj->kset->list_lock);
210 	kset_put(kobj->kset);
211 }
212 
213 static void kobject_init_internal(struct kobject *kobj)
214 {
215 	if (!kobj)
216 		return;
217 	kref_init(&kobj->kref);
218 	INIT_LIST_HEAD(&kobj->entry);
219 	kobj->state_in_sysfs = 0;
220 	kobj->state_add_uevent_sent = 0;
221 	kobj->state_remove_uevent_sent = 0;
222 	kobj->state_initialized = 1;
223 }
224 
225 
226 static int kobject_add_internal(struct kobject *kobj)
227 {
228 	int error = 0;
229 	struct kobject *parent;
230 
231 	if (!kobj)
232 		return -ENOENT;
233 
234 	if (!kobj->name || !kobj->name[0]) {
235 		WARN(1,
236 		     "kobject: (%p): attempted to be registered with empty name!\n",
237 		     kobj);
238 		return -EINVAL;
239 	}
240 
241 	parent = kobject_get(kobj->parent);
242 
243 	/* join kset if set, use it as parent if we do not already have one */
244 	if (kobj->kset) {
245 		if (!parent)
246 			parent = kobject_get(&kobj->kset->kobj);
247 		kobj_kset_join(kobj);
248 		kobj->parent = parent;
249 	}
250 
251 	pr_debug("kobject: '%s' (%p): %s: parent: '%s', set: '%s'\n",
252 		 kobject_name(kobj), kobj, __func__,
253 		 parent ? kobject_name(parent) : "<NULL>",
254 		 kobj->kset ? kobject_name(&kobj->kset->kobj) : "<NULL>");
255 
256 	error = create_dir(kobj);
257 	if (error) {
258 		kobj_kset_leave(kobj);
259 		kobject_put(parent);
260 		kobj->parent = NULL;
261 
262 		/* be noisy on error issues */
263 		if (error == -EEXIST)
264 			pr_err("%s failed for %s with -EEXIST, don't try to register things with the same name in the same directory.\n",
265 			       __func__, kobject_name(kobj));
266 		else
267 			pr_err("%s failed for %s (error: %d parent: %s)\n",
268 			       __func__, kobject_name(kobj), error,
269 			       parent ? kobject_name(parent) : "'none'");
270 	} else
271 		kobj->state_in_sysfs = 1;
272 
273 	return error;
274 }
275 
276 /**
277  * kobject_set_name_vargs - Set the name of an kobject
278  * @kobj: struct kobject to set the name of
279  * @fmt: format string used to build the name
280  * @vargs: vargs to format the string.
281  */
282 int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
283 				  va_list vargs)
284 {
285 	const char *s;
286 
287 	if (kobj->name && !fmt)
288 		return 0;
289 
290 	s = kvasprintf_const(GFP_KERNEL, fmt, vargs);
291 	if (!s)
292 		return -ENOMEM;
293 
294 	/*
295 	 * ewww... some of these buggers have '/' in the name ... If
296 	 * that's the case, we need to make sure we have an actual
297 	 * allocated copy to modify, since kvasprintf_const may have
298 	 * returned something from .rodata.
299 	 */
300 	if (strchr(s, '/')) {
301 		char *t;
302 
303 		t = kstrdup(s, GFP_KERNEL);
304 		kfree_const(s);
305 		if (!t)
306 			return -ENOMEM;
307 		strreplace(t, '/', '!');
308 		s = t;
309 	}
310 	kfree_const(kobj->name);
311 	kobj->name = s;
312 
313 	return 0;
314 }
315 
316 /**
317  * kobject_set_name - Set the name of a kobject
318  * @kobj: struct kobject to set the name of
319  * @fmt: format string used to build the name
320  *
321  * This sets the name of the kobject.  If you have already added the
322  * kobject to the system, you must call kobject_rename() in order to
323  * change the name of the kobject.
324  */
325 int kobject_set_name(struct kobject *kobj, const char *fmt, ...)
326 {
327 	va_list vargs;
328 	int retval;
329 
330 	va_start(vargs, fmt);
331 	retval = kobject_set_name_vargs(kobj, fmt, vargs);
332 	va_end(vargs);
333 
334 	return retval;
335 }
336 EXPORT_SYMBOL(kobject_set_name);
337 
338 /**
339  * kobject_init - initialize a kobject structure
340  * @kobj: pointer to the kobject to initialize
341  * @ktype: pointer to the ktype for this kobject.
342  *
343  * This function will properly initialize a kobject such that it can then
344  * be passed to the kobject_add() call.
345  *
346  * After this function is called, the kobject MUST be cleaned up by a call
347  * to kobject_put(), not by a call to kfree directly to ensure that all of
348  * the memory is cleaned up properly.
349  */
350 void kobject_init(struct kobject *kobj, struct kobj_type *ktype)
351 {
352 	char *err_str;
353 
354 	if (!kobj) {
355 		err_str = "invalid kobject pointer!";
356 		goto error;
357 	}
358 	if (!ktype) {
359 		err_str = "must have a ktype to be initialized properly!\n";
360 		goto error;
361 	}
362 	if (kobj->state_initialized) {
363 		/* do not error out as sometimes we can recover */
364 		pr_err("kobject (%p): tried to init an initialized object, something is seriously wrong.\n",
365 		       kobj);
366 		dump_stack();
367 	}
368 
369 	kobject_init_internal(kobj);
370 	kobj->ktype = ktype;
371 	return;
372 
373 error:
374 	pr_err("kobject (%p): %s\n", kobj, err_str);
375 	dump_stack();
376 }
377 EXPORT_SYMBOL(kobject_init);
378 
379 static __printf(3, 0) int kobject_add_varg(struct kobject *kobj,
380 					   struct kobject *parent,
381 					   const char *fmt, va_list vargs)
382 {
383 	int retval;
384 
385 	retval = kobject_set_name_vargs(kobj, fmt, vargs);
386 	if (retval) {
387 		pr_err("kobject: can not set name properly!\n");
388 		return retval;
389 	}
390 	kobj->parent = parent;
391 	return kobject_add_internal(kobj);
392 }
393 
394 /**
395  * kobject_add - the main kobject add function
396  * @kobj: the kobject to add
397  * @parent: pointer to the parent of the kobject.
398  * @fmt: format to name the kobject with.
399  *
400  * The kobject name is set and added to the kobject hierarchy in this
401  * function.
402  *
403  * If @parent is set, then the parent of the @kobj will be set to it.
404  * If @parent is NULL, then the parent of the @kobj will be set to the
405  * kobject associated with the kset assigned to this kobject.  If no kset
406  * is assigned to the kobject, then the kobject will be located in the
407  * root of the sysfs tree.
408  *
409  * If this function returns an error, kobject_put() must be called to
410  * properly clean up the memory associated with the object.
411  * Under no instance should the kobject that is passed to this function
412  * be directly freed with a call to kfree(), that can leak memory.
413  *
414  * Note, no "add" uevent will be created with this call, the caller should set
415  * up all of the necessary sysfs files for the object and then call
416  * kobject_uevent() with the UEVENT_ADD parameter to ensure that
417  * userspace is properly notified of this kobject's creation.
418  */
419 int kobject_add(struct kobject *kobj, struct kobject *parent,
420 		const char *fmt, ...)
421 {
422 	va_list args;
423 	int retval;
424 
425 	if (!kobj)
426 		return -EINVAL;
427 
428 	if (!kobj->state_initialized) {
429 		pr_err("kobject '%s' (%p): tried to add an uninitialized object, something is seriously wrong.\n",
430 		       kobject_name(kobj), kobj);
431 		dump_stack();
432 		return -EINVAL;
433 	}
434 	va_start(args, fmt);
435 	retval = kobject_add_varg(kobj, parent, fmt, args);
436 	va_end(args);
437 
438 	return retval;
439 }
440 EXPORT_SYMBOL(kobject_add);
441 
442 /**
443  * kobject_init_and_add - initialize a kobject structure and add it to the kobject hierarchy
444  * @kobj: pointer to the kobject to initialize
445  * @ktype: pointer to the ktype for this kobject.
446  * @parent: pointer to the parent of this kobject.
447  * @fmt: the name of the kobject.
448  *
449  * This function combines the call to kobject_init() and
450  * kobject_add().  The same type of error handling after a call to
451  * kobject_add() and kobject lifetime rules are the same here.
452  */
453 int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
454 			 struct kobject *parent, const char *fmt, ...)
455 {
456 	va_list args;
457 	int retval;
458 
459 	kobject_init(kobj, ktype);
460 
461 	va_start(args, fmt);
462 	retval = kobject_add_varg(kobj, parent, fmt, args);
463 	va_end(args);
464 
465 	return retval;
466 }
467 EXPORT_SYMBOL_GPL(kobject_init_and_add);
468 
469 /**
470  * kobject_rename - change the name of an object
471  * @kobj: object in question.
472  * @new_name: object's new name
473  *
474  * It is the responsibility of the caller to provide mutual
475  * exclusion between two different calls of kobject_rename
476  * on the same kobject and to ensure that new_name is valid and
477  * won't conflict with other kobjects.
478  */
479 int kobject_rename(struct kobject *kobj, const char *new_name)
480 {
481 	int error = 0;
482 	const char *devpath = NULL;
483 	const char *dup_name = NULL, *name;
484 	char *devpath_string = NULL;
485 	char *envp[2];
486 
487 	kobj = kobject_get(kobj);
488 	if (!kobj)
489 		return -EINVAL;
490 	if (!kobj->parent)
491 		return -EINVAL;
492 
493 	devpath = kobject_get_path(kobj, GFP_KERNEL);
494 	if (!devpath) {
495 		error = -ENOMEM;
496 		goto out;
497 	}
498 	devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL);
499 	if (!devpath_string) {
500 		error = -ENOMEM;
501 		goto out;
502 	}
503 	sprintf(devpath_string, "DEVPATH_OLD=%s", devpath);
504 	envp[0] = devpath_string;
505 	envp[1] = NULL;
506 
507 	name = dup_name = kstrdup_const(new_name, GFP_KERNEL);
508 	if (!name) {
509 		error = -ENOMEM;
510 		goto out;
511 	}
512 
513 	error = sysfs_rename_dir_ns(kobj, new_name, kobject_namespace(kobj));
514 	if (error)
515 		goto out;
516 
517 	/* Install the new kobject name */
518 	dup_name = kobj->name;
519 	kobj->name = name;
520 
521 	/* This function is mostly/only used for network interface.
522 	 * Some hotplug package track interfaces by their name and
523 	 * therefore want to know when the name is changed by the user. */
524 	kobject_uevent_env(kobj, KOBJ_MOVE, envp);
525 
526 out:
527 	kfree_const(dup_name);
528 	kfree(devpath_string);
529 	kfree(devpath);
530 	kobject_put(kobj);
531 
532 	return error;
533 }
534 EXPORT_SYMBOL_GPL(kobject_rename);
535 
536 /**
537  * kobject_move - move object to another parent
538  * @kobj: object in question.
539  * @new_parent: object's new parent (can be NULL)
540  */
541 int kobject_move(struct kobject *kobj, struct kobject *new_parent)
542 {
543 	int error;
544 	struct kobject *old_parent;
545 	const char *devpath = NULL;
546 	char *devpath_string = NULL;
547 	char *envp[2];
548 
549 	kobj = kobject_get(kobj);
550 	if (!kobj)
551 		return -EINVAL;
552 	new_parent = kobject_get(new_parent);
553 	if (!new_parent) {
554 		if (kobj->kset)
555 			new_parent = kobject_get(&kobj->kset->kobj);
556 	}
557 
558 	/* old object path */
559 	devpath = kobject_get_path(kobj, GFP_KERNEL);
560 	if (!devpath) {
561 		error = -ENOMEM;
562 		goto out;
563 	}
564 	devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL);
565 	if (!devpath_string) {
566 		error = -ENOMEM;
567 		goto out;
568 	}
569 	sprintf(devpath_string, "DEVPATH_OLD=%s", devpath);
570 	envp[0] = devpath_string;
571 	envp[1] = NULL;
572 	error = sysfs_move_dir_ns(kobj, new_parent, kobject_namespace(kobj));
573 	if (error)
574 		goto out;
575 	old_parent = kobj->parent;
576 	kobj->parent = new_parent;
577 	new_parent = NULL;
578 	kobject_put(old_parent);
579 	kobject_uevent_env(kobj, KOBJ_MOVE, envp);
580 out:
581 	kobject_put(new_parent);
582 	kobject_put(kobj);
583 	kfree(devpath_string);
584 	kfree(devpath);
585 	return error;
586 }
587 EXPORT_SYMBOL_GPL(kobject_move);
588 
589 /**
590  * kobject_del - unlink kobject from hierarchy.
591  * @kobj: object.
592  */
593 void kobject_del(struct kobject *kobj)
594 {
595 	struct kernfs_node *sd;
596 	const struct kobj_type *ktype = get_ktype(kobj);
597 
598 	if (!kobj)
599 		return;
600 
601 	sd = kobj->sd;
602 
603 	if (ktype)
604 		sysfs_remove_groups(kobj, ktype->default_groups);
605 
606 	sysfs_remove_dir(kobj);
607 	sysfs_put(sd);
608 
609 	kobj->state_in_sysfs = 0;
610 	kobj_kset_leave(kobj);
611 	kobject_put(kobj->parent);
612 	kobj->parent = NULL;
613 }
614 EXPORT_SYMBOL(kobject_del);
615 
616 /**
617  * kobject_get - increment refcount for object.
618  * @kobj: object.
619  */
620 struct kobject *kobject_get(struct kobject *kobj)
621 {
622 	if (kobj) {
623 		if (!kobj->state_initialized)
624 			WARN(1, KERN_WARNING
625 				"kobject: '%s' (%p): is not initialized, yet kobject_get() is being called.\n",
626 			     kobject_name(kobj), kobj);
627 		kref_get(&kobj->kref);
628 	}
629 	return kobj;
630 }
631 EXPORT_SYMBOL(kobject_get);
632 
633 struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj)
634 {
635 	if (!kobj)
636 		return NULL;
637 	if (!kref_get_unless_zero(&kobj->kref))
638 		kobj = NULL;
639 	return kobj;
640 }
641 EXPORT_SYMBOL(kobject_get_unless_zero);
642 
643 /*
644  * kobject_cleanup - free kobject resources.
645  * @kobj: object to cleanup
646  */
647 static void kobject_cleanup(struct kobject *kobj)
648 {
649 	struct kobj_type *t = get_ktype(kobj);
650 	const char *name = kobj->name;
651 
652 	pr_debug("kobject: '%s' (%p): %s, parent %p\n",
653 		 kobject_name(kobj), kobj, __func__, kobj->parent);
654 
655 	if (t && !t->release)
656 		pr_debug("kobject: '%s' (%p): does not have a release() function, it is broken and must be fixed. See Documentation/kobject.txt.\n",
657 			 kobject_name(kobj), kobj);
658 
659 	/* send "remove" if the caller did not do it but sent "add" */
660 	if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) {
661 		pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n",
662 			 kobject_name(kobj), kobj);
663 		kobject_uevent(kobj, KOBJ_REMOVE);
664 	}
665 
666 	/* remove from sysfs if the caller did not do it */
667 	if (kobj->state_in_sysfs) {
668 		pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n",
669 			 kobject_name(kobj), kobj);
670 		kobject_del(kobj);
671 	}
672 
673 	if (t && t->release) {
674 		pr_debug("kobject: '%s' (%p): calling ktype release\n",
675 			 kobject_name(kobj), kobj);
676 		t->release(kobj);
677 	}
678 
679 	/* free name if we allocated it */
680 	if (name) {
681 		pr_debug("kobject: '%s': free name\n", name);
682 		kfree_const(name);
683 	}
684 }
685 
686 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE
687 static void kobject_delayed_cleanup(struct work_struct *work)
688 {
689 	kobject_cleanup(container_of(to_delayed_work(work),
690 				     struct kobject, release));
691 }
692 #endif
693 
694 static void kobject_release(struct kref *kref)
695 {
696 	struct kobject *kobj = container_of(kref, struct kobject, kref);
697 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE
698 	unsigned long delay = HZ + HZ * (get_random_int() & 0x3);
699 	pr_info("kobject: '%s' (%p): %s, parent %p (delayed %ld)\n",
700 		 kobject_name(kobj), kobj, __func__, kobj->parent, delay);
701 	INIT_DELAYED_WORK(&kobj->release, kobject_delayed_cleanup);
702 
703 	schedule_delayed_work(&kobj->release, delay);
704 #else
705 	kobject_cleanup(kobj);
706 #endif
707 }
708 
709 /**
710  * kobject_put - decrement refcount for object.
711  * @kobj: object.
712  *
713  * Decrement the refcount, and if 0, call kobject_cleanup().
714  */
715 void kobject_put(struct kobject *kobj)
716 {
717 	if (kobj) {
718 		if (!kobj->state_initialized)
719 			WARN(1, KERN_WARNING
720 				"kobject: '%s' (%p): is not initialized, yet kobject_put() is being called.\n",
721 			     kobject_name(kobj), kobj);
722 		kref_put(&kobj->kref, kobject_release);
723 	}
724 }
725 EXPORT_SYMBOL(kobject_put);
726 
727 static void dynamic_kobj_release(struct kobject *kobj)
728 {
729 	pr_debug("kobject: (%p): %s\n", kobj, __func__);
730 	kfree(kobj);
731 }
732 
733 static struct kobj_type dynamic_kobj_ktype = {
734 	.release	= dynamic_kobj_release,
735 	.sysfs_ops	= &kobj_sysfs_ops,
736 };
737 
738 /**
739  * kobject_create - create a struct kobject dynamically
740  *
741  * This function creates a kobject structure dynamically and sets it up
742  * to be a "dynamic" kobject with a default release function set up.
743  *
744  * If the kobject was not able to be created, NULL will be returned.
745  * The kobject structure returned from here must be cleaned up with a
746  * call to kobject_put() and not kfree(), as kobject_init() has
747  * already been called on this structure.
748  */
749 struct kobject *kobject_create(void)
750 {
751 	struct kobject *kobj;
752 
753 	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
754 	if (!kobj)
755 		return NULL;
756 
757 	kobject_init(kobj, &dynamic_kobj_ktype);
758 	return kobj;
759 }
760 
761 /**
762  * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs
763  *
764  * @name: the name for the kobject
765  * @parent: the parent kobject of this kobject, if any.
766  *
767  * This function creates a kobject structure dynamically and registers it
768  * with sysfs.  When you are finished with this structure, call
769  * kobject_put() and the structure will be dynamically freed when
770  * it is no longer being used.
771  *
772  * If the kobject was not able to be created, NULL will be returned.
773  */
774 struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
775 {
776 	struct kobject *kobj;
777 	int retval;
778 
779 	kobj = kobject_create();
780 	if (!kobj)
781 		return NULL;
782 
783 	retval = kobject_add(kobj, parent, "%s", name);
784 	if (retval) {
785 		pr_warn("%s: kobject_add error: %d\n", __func__, retval);
786 		kobject_put(kobj);
787 		kobj = NULL;
788 	}
789 	return kobj;
790 }
791 EXPORT_SYMBOL_GPL(kobject_create_and_add);
792 
793 /**
794  * kset_init - initialize a kset for use
795  * @k: kset
796  */
797 void kset_init(struct kset *k)
798 {
799 	kobject_init_internal(&k->kobj);
800 	INIT_LIST_HEAD(&k->list);
801 	spin_lock_init(&k->list_lock);
802 }
803 
804 /* default kobject attribute operations */
805 static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr,
806 			      char *buf)
807 {
808 	struct kobj_attribute *kattr;
809 	ssize_t ret = -EIO;
810 
811 	kattr = container_of(attr, struct kobj_attribute, attr);
812 	if (kattr->show)
813 		ret = kattr->show(kobj, kattr, buf);
814 	return ret;
815 }
816 
817 static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr,
818 			       const char *buf, size_t count)
819 {
820 	struct kobj_attribute *kattr;
821 	ssize_t ret = -EIO;
822 
823 	kattr = container_of(attr, struct kobj_attribute, attr);
824 	if (kattr->store)
825 		ret = kattr->store(kobj, kattr, buf, count);
826 	return ret;
827 }
828 
829 const struct sysfs_ops kobj_sysfs_ops = {
830 	.show	= kobj_attr_show,
831 	.store	= kobj_attr_store,
832 };
833 EXPORT_SYMBOL_GPL(kobj_sysfs_ops);
834 
835 /**
836  * kset_register - initialize and add a kset.
837  * @k: kset.
838  */
839 int kset_register(struct kset *k)
840 {
841 	int err;
842 
843 	if (!k)
844 		return -EINVAL;
845 
846 	kset_init(k);
847 	err = kobject_add_internal(&k->kobj);
848 	if (err)
849 		return err;
850 	kobject_uevent(&k->kobj, KOBJ_ADD);
851 	return 0;
852 }
853 EXPORT_SYMBOL(kset_register);
854 
855 /**
856  * kset_unregister - remove a kset.
857  * @k: kset.
858  */
859 void kset_unregister(struct kset *k)
860 {
861 	if (!k)
862 		return;
863 	kobject_del(&k->kobj);
864 	kobject_put(&k->kobj);
865 }
866 EXPORT_SYMBOL(kset_unregister);
867 
868 /**
869  * kset_find_obj - search for object in kset.
870  * @kset: kset we're looking in.
871  * @name: object's name.
872  *
873  * Lock kset via @kset->subsys, and iterate over @kset->list,
874  * looking for a matching kobject. If matching object is found
875  * take a reference and return the object.
876  */
877 struct kobject *kset_find_obj(struct kset *kset, const char *name)
878 {
879 	struct kobject *k;
880 	struct kobject *ret = NULL;
881 
882 	spin_lock(&kset->list_lock);
883 
884 	list_for_each_entry(k, &kset->list, entry) {
885 		if (kobject_name(k) && !strcmp(kobject_name(k), name)) {
886 			ret = kobject_get_unless_zero(k);
887 			break;
888 		}
889 	}
890 
891 	spin_unlock(&kset->list_lock);
892 	return ret;
893 }
894 EXPORT_SYMBOL_GPL(kset_find_obj);
895 
896 static void kset_release(struct kobject *kobj)
897 {
898 	struct kset *kset = container_of(kobj, struct kset, kobj);
899 	pr_debug("kobject: '%s' (%p): %s\n",
900 		 kobject_name(kobj), kobj, __func__);
901 	kfree(kset);
902 }
903 
904 static void kset_get_ownership(struct kobject *kobj, kuid_t *uid, kgid_t *gid)
905 {
906 	if (kobj->parent)
907 		kobject_get_ownership(kobj->parent, uid, gid);
908 }
909 
910 static struct kobj_type kset_ktype = {
911 	.sysfs_ops	= &kobj_sysfs_ops,
912 	.release	= kset_release,
913 	.get_ownership	= kset_get_ownership,
914 };
915 
916 /**
917  * kset_create - create a struct kset dynamically
918  *
919  * @name: the name for the kset
920  * @uevent_ops: a struct kset_uevent_ops for the kset
921  * @parent_kobj: the parent kobject of this kset, if any.
922  *
923  * This function creates a kset structure dynamically.  This structure can
924  * then be registered with the system and show up in sysfs with a call to
925  * kset_register().  When you are finished with this structure, if
926  * kset_register() has been called, call kset_unregister() and the
927  * structure will be dynamically freed when it is no longer being used.
928  *
929  * If the kset was not able to be created, NULL will be returned.
930  */
931 static struct kset *kset_create(const char *name,
932 				const struct kset_uevent_ops *uevent_ops,
933 				struct kobject *parent_kobj)
934 {
935 	struct kset *kset;
936 	int retval;
937 
938 	kset = kzalloc(sizeof(*kset), GFP_KERNEL);
939 	if (!kset)
940 		return NULL;
941 	retval = kobject_set_name(&kset->kobj, "%s", name);
942 	if (retval) {
943 		kfree(kset);
944 		return NULL;
945 	}
946 	kset->uevent_ops = uevent_ops;
947 	kset->kobj.parent = parent_kobj;
948 
949 	/*
950 	 * The kobject of this kset will have a type of kset_ktype and belong to
951 	 * no kset itself.  That way we can properly free it when it is
952 	 * finished being used.
953 	 */
954 	kset->kobj.ktype = &kset_ktype;
955 	kset->kobj.kset = NULL;
956 
957 	return kset;
958 }
959 
960 /**
961  * kset_create_and_add - create a struct kset dynamically and add it to sysfs
962  *
963  * @name: the name for the kset
964  * @uevent_ops: a struct kset_uevent_ops for the kset
965  * @parent_kobj: the parent kobject of this kset, if any.
966  *
967  * This function creates a kset structure dynamically and registers it
968  * with sysfs.  When you are finished with this structure, call
969  * kset_unregister() and the structure will be dynamically freed when it
970  * is no longer being used.
971  *
972  * If the kset was not able to be created, NULL will be returned.
973  */
974 struct kset *kset_create_and_add(const char *name,
975 				 const struct kset_uevent_ops *uevent_ops,
976 				 struct kobject *parent_kobj)
977 {
978 	struct kset *kset;
979 	int error;
980 
981 	kset = kset_create(name, uevent_ops, parent_kobj);
982 	if (!kset)
983 		return NULL;
984 	error = kset_register(kset);
985 	if (error) {
986 		kfree(kset);
987 		return NULL;
988 	}
989 	return kset;
990 }
991 EXPORT_SYMBOL_GPL(kset_create_and_add);
992 
993 
994 static DEFINE_SPINLOCK(kobj_ns_type_lock);
995 static const struct kobj_ns_type_operations *kobj_ns_ops_tbl[KOBJ_NS_TYPES];
996 
997 int kobj_ns_type_register(const struct kobj_ns_type_operations *ops)
998 {
999 	enum kobj_ns_type type = ops->type;
1000 	int error;
1001 
1002 	spin_lock(&kobj_ns_type_lock);
1003 
1004 	error = -EINVAL;
1005 	if (type >= KOBJ_NS_TYPES)
1006 		goto out;
1007 
1008 	error = -EINVAL;
1009 	if (type <= KOBJ_NS_TYPE_NONE)
1010 		goto out;
1011 
1012 	error = -EBUSY;
1013 	if (kobj_ns_ops_tbl[type])
1014 		goto out;
1015 
1016 	error = 0;
1017 	kobj_ns_ops_tbl[type] = ops;
1018 
1019 out:
1020 	spin_unlock(&kobj_ns_type_lock);
1021 	return error;
1022 }
1023 
1024 int kobj_ns_type_registered(enum kobj_ns_type type)
1025 {
1026 	int registered = 0;
1027 
1028 	spin_lock(&kobj_ns_type_lock);
1029 	if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES))
1030 		registered = kobj_ns_ops_tbl[type] != NULL;
1031 	spin_unlock(&kobj_ns_type_lock);
1032 
1033 	return registered;
1034 }
1035 
1036 const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent)
1037 {
1038 	const struct kobj_ns_type_operations *ops = NULL;
1039 
1040 	if (parent && parent->ktype && parent->ktype->child_ns_type)
1041 		ops = parent->ktype->child_ns_type(parent);
1042 
1043 	return ops;
1044 }
1045 
1046 const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj)
1047 {
1048 	return kobj_child_ns_ops(kobj->parent);
1049 }
1050 
1051 bool kobj_ns_current_may_mount(enum kobj_ns_type type)
1052 {
1053 	bool may_mount = true;
1054 
1055 	spin_lock(&kobj_ns_type_lock);
1056 	if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) &&
1057 	    kobj_ns_ops_tbl[type])
1058 		may_mount = kobj_ns_ops_tbl[type]->current_may_mount();
1059 	spin_unlock(&kobj_ns_type_lock);
1060 
1061 	return may_mount;
1062 }
1063 
1064 void *kobj_ns_grab_current(enum kobj_ns_type type)
1065 {
1066 	void *ns = NULL;
1067 
1068 	spin_lock(&kobj_ns_type_lock);
1069 	if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) &&
1070 	    kobj_ns_ops_tbl[type])
1071 		ns = kobj_ns_ops_tbl[type]->grab_current_ns();
1072 	spin_unlock(&kobj_ns_type_lock);
1073 
1074 	return ns;
1075 }
1076 EXPORT_SYMBOL_GPL(kobj_ns_grab_current);
1077 
1078 const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk)
1079 {
1080 	const void *ns = NULL;
1081 
1082 	spin_lock(&kobj_ns_type_lock);
1083 	if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) &&
1084 	    kobj_ns_ops_tbl[type])
1085 		ns = kobj_ns_ops_tbl[type]->netlink_ns(sk);
1086 	spin_unlock(&kobj_ns_type_lock);
1087 
1088 	return ns;
1089 }
1090 
1091 const void *kobj_ns_initial(enum kobj_ns_type type)
1092 {
1093 	const void *ns = NULL;
1094 
1095 	spin_lock(&kobj_ns_type_lock);
1096 	if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) &&
1097 	    kobj_ns_ops_tbl[type])
1098 		ns = kobj_ns_ops_tbl[type]->initial_ns();
1099 	spin_unlock(&kobj_ns_type_lock);
1100 
1101 	return ns;
1102 }
1103 
1104 void kobj_ns_drop(enum kobj_ns_type type, void *ns)
1105 {
1106 	spin_lock(&kobj_ns_type_lock);
1107 	if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) &&
1108 	    kobj_ns_ops_tbl[type] && kobj_ns_ops_tbl[type]->drop_ns)
1109 		kobj_ns_ops_tbl[type]->drop_ns(ns);
1110 	spin_unlock(&kobj_ns_type_lock);
1111 }
1112 EXPORT_SYMBOL_GPL(kobj_ns_drop);
1113