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