xref: /linux/fs/proc/proc_sysctl.c (revision cdd30ebb1b9f36159d66f088b61aee264e649d7a)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * /proc/sys support
4  */
5 #include <linux/init.h>
6 #include <linux/sysctl.h>
7 #include <linux/poll.h>
8 #include <linux/proc_fs.h>
9 #include <linux/printk.h>
10 #include <linux/security.h>
11 #include <linux/sched.h>
12 #include <linux/cred.h>
13 #include <linux/namei.h>
14 #include <linux/mm.h>
15 #include <linux/uio.h>
16 #include <linux/module.h>
17 #include <linux/bpf-cgroup.h>
18 #include <linux/mount.h>
19 #include <linux/kmemleak.h>
20 #include <linux/lockdep.h>
21 #include "internal.h"
22 
23 #define list_for_each_table_entry(entry, header)	\
24 	entry = header->ctl_table;			\
25 	for (size_t i = 0 ; i < header->ctl_table_size; ++i, entry++)
26 
27 static const struct dentry_operations proc_sys_dentry_operations;
28 static const struct file_operations proc_sys_file_operations;
29 static const struct inode_operations proc_sys_inode_operations;
30 static const struct file_operations proc_sys_dir_file_operations;
31 static const struct inode_operations proc_sys_dir_operations;
32 
33 /*
34  * Support for permanently empty directories.
35  * Must be non-empty to avoid sharing an address with other tables.
36  */
37 static const struct ctl_table sysctl_mount_point[] = {
38 	{ }
39 };
40 
41 /**
42  * register_sysctl_mount_point() - registers a sysctl mount point
43  * @path: path for the mount point
44  *
45  * Used to create a permanently empty directory to serve as mount point.
46  * There are some subtle but important permission checks this allows in the
47  * case of unprivileged mounts.
48  */
49 struct ctl_table_header *register_sysctl_mount_point(const char *path)
50 {
51 	return register_sysctl_sz(path, sysctl_mount_point, 0);
52 }
53 EXPORT_SYMBOL(register_sysctl_mount_point);
54 
55 #define sysctl_is_perm_empty_ctl_header(hptr)		\
56 	(hptr->type == SYSCTL_TABLE_TYPE_PERMANENTLY_EMPTY)
57 #define sysctl_set_perm_empty_ctl_header(hptr)		\
58 	(hptr->type = SYSCTL_TABLE_TYPE_PERMANENTLY_EMPTY)
59 #define sysctl_clear_perm_empty_ctl_header(hptr)	\
60 	(hptr->type = SYSCTL_TABLE_TYPE_DEFAULT)
61 
62 void proc_sys_poll_notify(struct ctl_table_poll *poll)
63 {
64 	if (!poll)
65 		return;
66 
67 	atomic_inc(&poll->event);
68 	wake_up_interruptible(&poll->wait);
69 }
70 
71 static const struct ctl_table root_table[] = {
72 	{
73 		.procname = "",
74 		.mode = S_IFDIR|S_IRUGO|S_IXUGO,
75 	},
76 };
77 static struct ctl_table_root sysctl_table_root = {
78 	.default_set.dir.header = {
79 		{{.count = 1,
80 		  .nreg = 1,
81 		  .ctl_table = root_table }},
82 		.ctl_table_arg = root_table,
83 		.root = &sysctl_table_root,
84 		.set = &sysctl_table_root.default_set,
85 	},
86 };
87 
88 static DEFINE_SPINLOCK(sysctl_lock);
89 
90 static void drop_sysctl_table(struct ctl_table_header *header);
91 static int sysctl_follow_link(struct ctl_table_header **phead,
92 	const struct ctl_table **pentry);
93 static int insert_links(struct ctl_table_header *head);
94 static void put_links(struct ctl_table_header *header);
95 
96 static void sysctl_print_dir(struct ctl_dir *dir)
97 {
98 	if (dir->header.parent)
99 		sysctl_print_dir(dir->header.parent);
100 	pr_cont("%s/", dir->header.ctl_table[0].procname);
101 }
102 
103 static int namecmp(const char *name1, int len1, const char *name2, int len2)
104 {
105 	int cmp;
106 
107 	cmp = memcmp(name1, name2, min(len1, len2));
108 	if (cmp == 0)
109 		cmp = len1 - len2;
110 	return cmp;
111 }
112 
113 static const struct ctl_table *find_entry(struct ctl_table_header **phead,
114 	struct ctl_dir *dir, const char *name, int namelen)
115 {
116 	struct ctl_table_header *head;
117 	const struct ctl_table *entry;
118 	struct rb_node *node = dir->root.rb_node;
119 
120 	lockdep_assert_held(&sysctl_lock);
121 
122 	while (node)
123 	{
124 		struct ctl_node *ctl_node;
125 		const char *procname;
126 		int cmp;
127 
128 		ctl_node = rb_entry(node, struct ctl_node, node);
129 		head = ctl_node->header;
130 		entry = &head->ctl_table[ctl_node - head->node];
131 		procname = entry->procname;
132 
133 		cmp = namecmp(name, namelen, procname, strlen(procname));
134 		if (cmp < 0)
135 			node = node->rb_left;
136 		else if (cmp > 0)
137 			node = node->rb_right;
138 		else {
139 			*phead = head;
140 			return entry;
141 		}
142 	}
143 	return NULL;
144 }
145 
146 static int insert_entry(struct ctl_table_header *head, const struct ctl_table *entry)
147 {
148 	struct rb_node *node = &head->node[entry - head->ctl_table].node;
149 	struct rb_node **p = &head->parent->root.rb_node;
150 	struct rb_node *parent = NULL;
151 	const char *name = entry->procname;
152 	int namelen = strlen(name);
153 
154 	while (*p) {
155 		struct ctl_table_header *parent_head;
156 		const struct ctl_table *parent_entry;
157 		struct ctl_node *parent_node;
158 		const char *parent_name;
159 		int cmp;
160 
161 		parent = *p;
162 		parent_node = rb_entry(parent, struct ctl_node, node);
163 		parent_head = parent_node->header;
164 		parent_entry = &parent_head->ctl_table[parent_node - parent_head->node];
165 		parent_name = parent_entry->procname;
166 
167 		cmp = namecmp(name, namelen, parent_name, strlen(parent_name));
168 		if (cmp < 0)
169 			p = &(*p)->rb_left;
170 		else if (cmp > 0)
171 			p = &(*p)->rb_right;
172 		else {
173 			pr_err("sysctl duplicate entry: ");
174 			sysctl_print_dir(head->parent);
175 			pr_cont("%s\n", entry->procname);
176 			return -EEXIST;
177 		}
178 	}
179 
180 	rb_link_node(node, parent, p);
181 	rb_insert_color(node, &head->parent->root);
182 	return 0;
183 }
184 
185 static void erase_entry(struct ctl_table_header *head, const struct ctl_table *entry)
186 {
187 	struct rb_node *node = &head->node[entry - head->ctl_table].node;
188 
189 	rb_erase(node, &head->parent->root);
190 }
191 
192 static void init_header(struct ctl_table_header *head,
193 	struct ctl_table_root *root, struct ctl_table_set *set,
194 	struct ctl_node *node, const struct ctl_table *table, size_t table_size)
195 {
196 	head->ctl_table = table;
197 	head->ctl_table_size = table_size;
198 	head->ctl_table_arg = table;
199 	head->used = 0;
200 	head->count = 1;
201 	head->nreg = 1;
202 	head->unregistering = NULL;
203 	head->root = root;
204 	head->set = set;
205 	head->parent = NULL;
206 	head->node = node;
207 	INIT_HLIST_HEAD(&head->inodes);
208 	if (node) {
209 		const struct ctl_table *entry;
210 
211 		list_for_each_table_entry(entry, head) {
212 			node->header = head;
213 			node++;
214 		}
215 	}
216 	if (table == sysctl_mount_point)
217 		sysctl_set_perm_empty_ctl_header(head);
218 }
219 
220 static void erase_header(struct ctl_table_header *head)
221 {
222 	const struct ctl_table *entry;
223 
224 	list_for_each_table_entry(entry, head)
225 		erase_entry(head, entry);
226 }
227 
228 static int insert_header(struct ctl_dir *dir, struct ctl_table_header *header)
229 {
230 	const struct ctl_table *entry;
231 	struct ctl_table_header *dir_h = &dir->header;
232 	int err;
233 
234 
235 	/* Is this a permanently empty directory? */
236 	if (sysctl_is_perm_empty_ctl_header(dir_h))
237 		return -EROFS;
238 
239 	/* Am I creating a permanently empty directory? */
240 	if (sysctl_is_perm_empty_ctl_header(header)) {
241 		if (!RB_EMPTY_ROOT(&dir->root))
242 			return -EINVAL;
243 		sysctl_set_perm_empty_ctl_header(dir_h);
244 	}
245 
246 	dir_h->nreg++;
247 	header->parent = dir;
248 	err = insert_links(header);
249 	if (err)
250 		goto fail_links;
251 	list_for_each_table_entry(entry, header) {
252 		err = insert_entry(header, entry);
253 		if (err)
254 			goto fail;
255 	}
256 	return 0;
257 fail:
258 	erase_header(header);
259 	put_links(header);
260 fail_links:
261 	if (header->ctl_table == sysctl_mount_point)
262 		sysctl_clear_perm_empty_ctl_header(dir_h);
263 	header->parent = NULL;
264 	drop_sysctl_table(dir_h);
265 	return err;
266 }
267 
268 static int use_table(struct ctl_table_header *p)
269 {
270 	lockdep_assert_held(&sysctl_lock);
271 
272 	if (unlikely(p->unregistering))
273 		return 0;
274 	p->used++;
275 	return 1;
276 }
277 
278 static void unuse_table(struct ctl_table_header *p)
279 {
280 	lockdep_assert_held(&sysctl_lock);
281 
282 	if (!--p->used)
283 		if (unlikely(p->unregistering))
284 			complete(p->unregistering);
285 }
286 
287 static void proc_sys_invalidate_dcache(struct ctl_table_header *head)
288 {
289 	proc_invalidate_siblings_dcache(&head->inodes, &sysctl_lock);
290 }
291 
292 static void start_unregistering(struct ctl_table_header *p)
293 {
294 	/* will reacquire if has to wait */
295 	lockdep_assert_held(&sysctl_lock);
296 
297 	/*
298 	 * if p->used is 0, nobody will ever touch that entry again;
299 	 * we'll eliminate all paths to it before dropping sysctl_lock
300 	 */
301 	if (unlikely(p->used)) {
302 		struct completion wait;
303 		init_completion(&wait);
304 		p->unregistering = &wait;
305 		spin_unlock(&sysctl_lock);
306 		wait_for_completion(&wait);
307 	} else {
308 		/* anything non-NULL; we'll never dereference it */
309 		p->unregistering = ERR_PTR(-EINVAL);
310 		spin_unlock(&sysctl_lock);
311 	}
312 	/*
313 	 * Invalidate dentries for unregistered sysctls: namespaced sysctls
314 	 * can have duplicate names and contaminate dcache very badly.
315 	 */
316 	proc_sys_invalidate_dcache(p);
317 	/*
318 	 * do not remove from the list until nobody holds it; walking the
319 	 * list in do_sysctl() relies on that.
320 	 */
321 	spin_lock(&sysctl_lock);
322 	erase_header(p);
323 }
324 
325 static struct ctl_table_header *sysctl_head_grab(struct ctl_table_header *head)
326 {
327 	BUG_ON(!head);
328 	spin_lock(&sysctl_lock);
329 	if (!use_table(head))
330 		head = ERR_PTR(-ENOENT);
331 	spin_unlock(&sysctl_lock);
332 	return head;
333 }
334 
335 static void sysctl_head_finish(struct ctl_table_header *head)
336 {
337 	if (!head)
338 		return;
339 	spin_lock(&sysctl_lock);
340 	unuse_table(head);
341 	spin_unlock(&sysctl_lock);
342 }
343 
344 static struct ctl_table_set *
345 lookup_header_set(struct ctl_table_root *root)
346 {
347 	struct ctl_table_set *set = &root->default_set;
348 	if (root->lookup)
349 		set = root->lookup(root);
350 	return set;
351 }
352 
353 static const struct ctl_table *lookup_entry(struct ctl_table_header **phead,
354 					    struct ctl_dir *dir,
355 					    const char *name, int namelen)
356 {
357 	struct ctl_table_header *head;
358 	const struct ctl_table *entry;
359 
360 	spin_lock(&sysctl_lock);
361 	entry = find_entry(&head, dir, name, namelen);
362 	if (entry && use_table(head))
363 		*phead = head;
364 	else
365 		entry = NULL;
366 	spin_unlock(&sysctl_lock);
367 	return entry;
368 }
369 
370 static struct ctl_node *first_usable_entry(struct rb_node *node)
371 {
372 	struct ctl_node *ctl_node;
373 
374 	for (;node; node = rb_next(node)) {
375 		ctl_node = rb_entry(node, struct ctl_node, node);
376 		if (use_table(ctl_node->header))
377 			return ctl_node;
378 	}
379 	return NULL;
380 }
381 
382 static void first_entry(struct ctl_dir *dir,
383 	struct ctl_table_header **phead, const struct ctl_table **pentry)
384 {
385 	struct ctl_table_header *head = NULL;
386 	const struct ctl_table *entry = NULL;
387 	struct ctl_node *ctl_node;
388 
389 	spin_lock(&sysctl_lock);
390 	ctl_node = first_usable_entry(rb_first(&dir->root));
391 	spin_unlock(&sysctl_lock);
392 	if (ctl_node) {
393 		head = ctl_node->header;
394 		entry = &head->ctl_table[ctl_node - head->node];
395 	}
396 	*phead = head;
397 	*pentry = entry;
398 }
399 
400 static void next_entry(struct ctl_table_header **phead, const struct ctl_table **pentry)
401 {
402 	struct ctl_table_header *head = *phead;
403 	const struct ctl_table *entry = *pentry;
404 	struct ctl_node *ctl_node = &head->node[entry - head->ctl_table];
405 
406 	spin_lock(&sysctl_lock);
407 	unuse_table(head);
408 
409 	ctl_node = first_usable_entry(rb_next(&ctl_node->node));
410 	spin_unlock(&sysctl_lock);
411 	head = NULL;
412 	if (ctl_node) {
413 		head = ctl_node->header;
414 		entry = &head->ctl_table[ctl_node - head->node];
415 	}
416 	*phead = head;
417 	*pentry = entry;
418 }
419 
420 /*
421  * sysctl_perm does NOT grant the superuser all rights automatically, because
422  * some sysctl variables are readonly even to root.
423  */
424 
425 static int test_perm(int mode, int op)
426 {
427 	if (uid_eq(current_euid(), GLOBAL_ROOT_UID))
428 		mode >>= 6;
429 	else if (in_egroup_p(GLOBAL_ROOT_GID))
430 		mode >>= 3;
431 	if ((op & ~mode & (MAY_READ|MAY_WRITE|MAY_EXEC)) == 0)
432 		return 0;
433 	return -EACCES;
434 }
435 
436 static int sysctl_perm(struct ctl_table_header *head, const struct ctl_table *table, int op)
437 {
438 	struct ctl_table_root *root = head->root;
439 	int mode;
440 
441 	if (root->permissions)
442 		mode = root->permissions(head, table);
443 	else
444 		mode = table->mode;
445 
446 	return test_perm(mode, op);
447 }
448 
449 static struct inode *proc_sys_make_inode(struct super_block *sb,
450 		struct ctl_table_header *head, const struct ctl_table *table)
451 {
452 	struct ctl_table_root *root = head->root;
453 	struct inode *inode;
454 	struct proc_inode *ei;
455 
456 	inode = new_inode(sb);
457 	if (!inode)
458 		return ERR_PTR(-ENOMEM);
459 
460 	inode->i_ino = get_next_ino();
461 
462 	ei = PROC_I(inode);
463 
464 	spin_lock(&sysctl_lock);
465 	if (unlikely(head->unregistering)) {
466 		spin_unlock(&sysctl_lock);
467 		iput(inode);
468 		return ERR_PTR(-ENOENT);
469 	}
470 	ei->sysctl = head;
471 	ei->sysctl_entry = table;
472 	hlist_add_head_rcu(&ei->sibling_inodes, &head->inodes);
473 	head->count++;
474 	spin_unlock(&sysctl_lock);
475 
476 	simple_inode_init_ts(inode);
477 	inode->i_mode = table->mode;
478 	if (!S_ISDIR(table->mode)) {
479 		inode->i_mode |= S_IFREG;
480 		inode->i_op = &proc_sys_inode_operations;
481 		inode->i_fop = &proc_sys_file_operations;
482 	} else {
483 		inode->i_mode |= S_IFDIR;
484 		inode->i_op = &proc_sys_dir_operations;
485 		inode->i_fop = &proc_sys_dir_file_operations;
486 		if (sysctl_is_perm_empty_ctl_header(head))
487 			make_empty_dir_inode(inode);
488 	}
489 
490 	inode->i_uid = GLOBAL_ROOT_UID;
491 	inode->i_gid = GLOBAL_ROOT_GID;
492 	if (root->set_ownership)
493 		root->set_ownership(head, &inode->i_uid, &inode->i_gid);
494 
495 	return inode;
496 }
497 
498 void proc_sys_evict_inode(struct inode *inode, struct ctl_table_header *head)
499 {
500 	spin_lock(&sysctl_lock);
501 	hlist_del_init_rcu(&PROC_I(inode)->sibling_inodes);
502 	if (!--head->count)
503 		kfree_rcu(head, rcu);
504 	spin_unlock(&sysctl_lock);
505 }
506 
507 static struct ctl_table_header *grab_header(struct inode *inode)
508 {
509 	struct ctl_table_header *head = PROC_I(inode)->sysctl;
510 	if (!head)
511 		head = &sysctl_table_root.default_set.dir.header;
512 	return sysctl_head_grab(head);
513 }
514 
515 static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
516 					unsigned int flags)
517 {
518 	struct ctl_table_header *head = grab_header(dir);
519 	struct ctl_table_header *h = NULL;
520 	const struct qstr *name = &dentry->d_name;
521 	const struct ctl_table *p;
522 	struct inode *inode;
523 	struct dentry *err = ERR_PTR(-ENOENT);
524 	struct ctl_dir *ctl_dir;
525 	int ret;
526 
527 	if (IS_ERR(head))
528 		return ERR_CAST(head);
529 
530 	ctl_dir = container_of(head, struct ctl_dir, header);
531 
532 	p = lookup_entry(&h, ctl_dir, name->name, name->len);
533 	if (!p)
534 		goto out;
535 
536 	if (S_ISLNK(p->mode)) {
537 		ret = sysctl_follow_link(&h, &p);
538 		err = ERR_PTR(ret);
539 		if (ret)
540 			goto out;
541 	}
542 
543 	d_set_d_op(dentry, &proc_sys_dentry_operations);
544 	inode = proc_sys_make_inode(dir->i_sb, h ? h : head, p);
545 	err = d_splice_alias(inode, dentry);
546 
547 out:
548 	if (h)
549 		sysctl_head_finish(h);
550 	sysctl_head_finish(head);
551 	return err;
552 }
553 
554 static ssize_t proc_sys_call_handler(struct kiocb *iocb, struct iov_iter *iter,
555 		int write)
556 {
557 	struct inode *inode = file_inode(iocb->ki_filp);
558 	struct ctl_table_header *head = grab_header(inode);
559 	const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
560 	size_t count = iov_iter_count(iter);
561 	char *kbuf;
562 	ssize_t error;
563 
564 	if (IS_ERR(head))
565 		return PTR_ERR(head);
566 
567 	/*
568 	 * At this point we know that the sysctl was not unregistered
569 	 * and won't be until we finish.
570 	 */
571 	error = -EPERM;
572 	if (sysctl_perm(head, table, write ? MAY_WRITE : MAY_READ))
573 		goto out;
574 
575 	/* if that can happen at all, it should be -EINVAL, not -EISDIR */
576 	error = -EINVAL;
577 	if (!table->proc_handler)
578 		goto out;
579 
580 	/* don't even try if the size is too large */
581 	error = -ENOMEM;
582 	if (count >= KMALLOC_MAX_SIZE)
583 		goto out;
584 	kbuf = kvzalloc(count + 1, GFP_KERNEL);
585 	if (!kbuf)
586 		goto out;
587 
588 	if (write) {
589 		error = -EFAULT;
590 		if (!copy_from_iter_full(kbuf, count, iter))
591 			goto out_free_buf;
592 		kbuf[count] = '\0';
593 	}
594 
595 	error = BPF_CGROUP_RUN_PROG_SYSCTL(head, table, write, &kbuf, &count,
596 					   &iocb->ki_pos);
597 	if (error)
598 		goto out_free_buf;
599 
600 	/* careful: calling conventions are nasty here */
601 	error = table->proc_handler(table, write, kbuf, &count, &iocb->ki_pos);
602 	if (error)
603 		goto out_free_buf;
604 
605 	if (!write) {
606 		error = -EFAULT;
607 		if (copy_to_iter(kbuf, count, iter) < count)
608 			goto out_free_buf;
609 	}
610 
611 	error = count;
612 out_free_buf:
613 	kvfree(kbuf);
614 out:
615 	sysctl_head_finish(head);
616 
617 	return error;
618 }
619 
620 static ssize_t proc_sys_read(struct kiocb *iocb, struct iov_iter *iter)
621 {
622 	return proc_sys_call_handler(iocb, iter, 0);
623 }
624 
625 static ssize_t proc_sys_write(struct kiocb *iocb, struct iov_iter *iter)
626 {
627 	return proc_sys_call_handler(iocb, iter, 1);
628 }
629 
630 static int proc_sys_open(struct inode *inode, struct file *filp)
631 {
632 	struct ctl_table_header *head = grab_header(inode);
633 	const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
634 
635 	/* sysctl was unregistered */
636 	if (IS_ERR(head))
637 		return PTR_ERR(head);
638 
639 	if (table->poll)
640 		filp->private_data = proc_sys_poll_event(table->poll);
641 
642 	sysctl_head_finish(head);
643 
644 	return 0;
645 }
646 
647 static __poll_t proc_sys_poll(struct file *filp, poll_table *wait)
648 {
649 	struct inode *inode = file_inode(filp);
650 	struct ctl_table_header *head = grab_header(inode);
651 	const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
652 	__poll_t ret = DEFAULT_POLLMASK;
653 	unsigned long event;
654 
655 	/* sysctl was unregistered */
656 	if (IS_ERR(head))
657 		return EPOLLERR | EPOLLHUP;
658 
659 	if (!table->proc_handler)
660 		goto out;
661 
662 	if (!table->poll)
663 		goto out;
664 
665 	event = (unsigned long)filp->private_data;
666 	poll_wait(filp, &table->poll->wait, wait);
667 
668 	if (event != atomic_read(&table->poll->event)) {
669 		filp->private_data = proc_sys_poll_event(table->poll);
670 		ret = EPOLLIN | EPOLLRDNORM | EPOLLERR | EPOLLPRI;
671 	}
672 
673 out:
674 	sysctl_head_finish(head);
675 
676 	return ret;
677 }
678 
679 static bool proc_sys_fill_cache(struct file *file,
680 				struct dir_context *ctx,
681 				struct ctl_table_header *head,
682 				const struct ctl_table *table)
683 {
684 	struct dentry *child, *dir = file->f_path.dentry;
685 	struct inode *inode;
686 	struct qstr qname;
687 	ino_t ino = 0;
688 	unsigned type = DT_UNKNOWN;
689 
690 	qname.name = table->procname;
691 	qname.len  = strlen(table->procname);
692 	qname.hash = full_name_hash(dir, qname.name, qname.len);
693 
694 	child = d_lookup(dir, &qname);
695 	if (!child) {
696 		DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
697 		child = d_alloc_parallel(dir, &qname, &wq);
698 		if (IS_ERR(child))
699 			return false;
700 		if (d_in_lookup(child)) {
701 			struct dentry *res;
702 			d_set_d_op(child, &proc_sys_dentry_operations);
703 			inode = proc_sys_make_inode(dir->d_sb, head, table);
704 			res = d_splice_alias(inode, child);
705 			d_lookup_done(child);
706 			if (unlikely(res)) {
707 				dput(child);
708 
709 				if (IS_ERR(res))
710 					return false;
711 
712 				child = res;
713 			}
714 		}
715 	}
716 	inode = d_inode(child);
717 	ino  = inode->i_ino;
718 	type = inode->i_mode >> 12;
719 	dput(child);
720 	return dir_emit(ctx, qname.name, qname.len, ino, type);
721 }
722 
723 static bool proc_sys_link_fill_cache(struct file *file,
724 				    struct dir_context *ctx,
725 				    struct ctl_table_header *head,
726 				    const struct ctl_table *table)
727 {
728 	bool ret = true;
729 
730 	head = sysctl_head_grab(head);
731 	if (IS_ERR(head))
732 		return false;
733 
734 	/* It is not an error if we can not follow the link ignore it */
735 	if (sysctl_follow_link(&head, &table))
736 		goto out;
737 
738 	ret = proc_sys_fill_cache(file, ctx, head, table);
739 out:
740 	sysctl_head_finish(head);
741 	return ret;
742 }
743 
744 static int scan(struct ctl_table_header *head, const struct ctl_table *table,
745 		unsigned long *pos, struct file *file,
746 		struct dir_context *ctx)
747 {
748 	bool res;
749 
750 	if ((*pos)++ < ctx->pos)
751 		return true;
752 
753 	if (unlikely(S_ISLNK(table->mode)))
754 		res = proc_sys_link_fill_cache(file, ctx, head, table);
755 	else
756 		res = proc_sys_fill_cache(file, ctx, head, table);
757 
758 	if (res)
759 		ctx->pos = *pos;
760 
761 	return res;
762 }
763 
764 static int proc_sys_readdir(struct file *file, struct dir_context *ctx)
765 {
766 	struct ctl_table_header *head = grab_header(file_inode(file));
767 	struct ctl_table_header *h = NULL;
768 	const struct ctl_table *entry;
769 	struct ctl_dir *ctl_dir;
770 	unsigned long pos;
771 
772 	if (IS_ERR(head))
773 		return PTR_ERR(head);
774 
775 	ctl_dir = container_of(head, struct ctl_dir, header);
776 
777 	if (!dir_emit_dots(file, ctx))
778 		goto out;
779 
780 	pos = 2;
781 
782 	for (first_entry(ctl_dir, &h, &entry); h; next_entry(&h, &entry)) {
783 		if (!scan(h, entry, &pos, file, ctx)) {
784 			sysctl_head_finish(h);
785 			break;
786 		}
787 	}
788 out:
789 	sysctl_head_finish(head);
790 	return 0;
791 }
792 
793 static int proc_sys_permission(struct mnt_idmap *idmap,
794 			       struct inode *inode, int mask)
795 {
796 	/*
797 	 * sysctl entries that are not writeable,
798 	 * are _NOT_ writeable, capabilities or not.
799 	 */
800 	struct ctl_table_header *head;
801 	const struct ctl_table *table;
802 	int error;
803 
804 	/* Executable files are not allowed under /proc/sys/ */
805 	if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))
806 		return -EACCES;
807 
808 	head = grab_header(inode);
809 	if (IS_ERR(head))
810 		return PTR_ERR(head);
811 
812 	table = PROC_I(inode)->sysctl_entry;
813 	if (!table) /* global root - r-xr-xr-x */
814 		error = mask & MAY_WRITE ? -EACCES : 0;
815 	else /* Use the permissions on the sysctl table entry */
816 		error = sysctl_perm(head, table, mask & ~MAY_NOT_BLOCK);
817 
818 	sysctl_head_finish(head);
819 	return error;
820 }
821 
822 static int proc_sys_setattr(struct mnt_idmap *idmap,
823 			    struct dentry *dentry, struct iattr *attr)
824 {
825 	struct inode *inode = d_inode(dentry);
826 	int error;
827 
828 	if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
829 		return -EPERM;
830 
831 	error = setattr_prepare(&nop_mnt_idmap, dentry, attr);
832 	if (error)
833 		return error;
834 
835 	setattr_copy(&nop_mnt_idmap, inode, attr);
836 	return 0;
837 }
838 
839 static int proc_sys_getattr(struct mnt_idmap *idmap,
840 			    const struct path *path, struct kstat *stat,
841 			    u32 request_mask, unsigned int query_flags)
842 {
843 	struct inode *inode = d_inode(path->dentry);
844 	struct ctl_table_header *head = grab_header(inode);
845 	const struct ctl_table *table = PROC_I(inode)->sysctl_entry;
846 
847 	if (IS_ERR(head))
848 		return PTR_ERR(head);
849 
850 	generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat);
851 	if (table)
852 		stat->mode = (stat->mode & S_IFMT) | table->mode;
853 
854 	sysctl_head_finish(head);
855 	return 0;
856 }
857 
858 static const struct file_operations proc_sys_file_operations = {
859 	.open		= proc_sys_open,
860 	.poll		= proc_sys_poll,
861 	.read_iter	= proc_sys_read,
862 	.write_iter	= proc_sys_write,
863 	.splice_read	= copy_splice_read,
864 	.splice_write	= iter_file_splice_write,
865 	.llseek		= default_llseek,
866 };
867 
868 static const struct file_operations proc_sys_dir_file_operations = {
869 	.read		= generic_read_dir,
870 	.iterate_shared	= proc_sys_readdir,
871 	.llseek		= generic_file_llseek,
872 };
873 
874 static const struct inode_operations proc_sys_inode_operations = {
875 	.permission	= proc_sys_permission,
876 	.setattr	= proc_sys_setattr,
877 	.getattr	= proc_sys_getattr,
878 };
879 
880 static const struct inode_operations proc_sys_dir_operations = {
881 	.lookup		= proc_sys_lookup,
882 	.permission	= proc_sys_permission,
883 	.setattr	= proc_sys_setattr,
884 	.getattr	= proc_sys_getattr,
885 };
886 
887 static int proc_sys_revalidate(struct dentry *dentry, unsigned int flags)
888 {
889 	if (flags & LOOKUP_RCU)
890 		return -ECHILD;
891 	return !PROC_I(d_inode(dentry))->sysctl->unregistering;
892 }
893 
894 static int proc_sys_delete(const struct dentry *dentry)
895 {
896 	return !!PROC_I(d_inode(dentry))->sysctl->unregistering;
897 }
898 
899 static int sysctl_is_seen(struct ctl_table_header *p)
900 {
901 	struct ctl_table_set *set = p->set;
902 	int res;
903 	spin_lock(&sysctl_lock);
904 	if (p->unregistering)
905 		res = 0;
906 	else if (!set->is_seen)
907 		res = 1;
908 	else
909 		res = set->is_seen(set);
910 	spin_unlock(&sysctl_lock);
911 	return res;
912 }
913 
914 static int proc_sys_compare(const struct dentry *dentry,
915 		unsigned int len, const char *str, const struct qstr *name)
916 {
917 	struct ctl_table_header *head;
918 	struct inode *inode;
919 
920 	/* Although proc doesn't have negative dentries, rcu-walk means
921 	 * that inode here can be NULL */
922 	/* AV: can it, indeed? */
923 	inode = d_inode_rcu(dentry);
924 	if (!inode)
925 		return 1;
926 	if (name->len != len)
927 		return 1;
928 	if (memcmp(name->name, str, len))
929 		return 1;
930 	head = rcu_dereference(PROC_I(inode)->sysctl);
931 	return !head || !sysctl_is_seen(head);
932 }
933 
934 static const struct dentry_operations proc_sys_dentry_operations = {
935 	.d_revalidate	= proc_sys_revalidate,
936 	.d_delete	= proc_sys_delete,
937 	.d_compare	= proc_sys_compare,
938 };
939 
940 static struct ctl_dir *find_subdir(struct ctl_dir *dir,
941 				   const char *name, int namelen)
942 {
943 	struct ctl_table_header *head;
944 	const struct ctl_table *entry;
945 
946 	entry = find_entry(&head, dir, name, namelen);
947 	if (!entry)
948 		return ERR_PTR(-ENOENT);
949 	if (!S_ISDIR(entry->mode))
950 		return ERR_PTR(-ENOTDIR);
951 	return container_of(head, struct ctl_dir, header);
952 }
953 
954 static struct ctl_dir *new_dir(struct ctl_table_set *set,
955 			       const char *name, int namelen)
956 {
957 	struct ctl_table *table;
958 	struct ctl_dir *new;
959 	struct ctl_node *node;
960 	char *new_name;
961 
962 	new = kzalloc(sizeof(*new) + sizeof(struct ctl_node) +
963 		      sizeof(struct ctl_table) +  namelen + 1,
964 		      GFP_KERNEL);
965 	if (!new)
966 		return NULL;
967 
968 	node = (struct ctl_node *)(new + 1);
969 	table = (struct ctl_table *)(node + 1);
970 	new_name = (char *)(table + 1);
971 	memcpy(new_name, name, namelen);
972 	table[0].procname = new_name;
973 	table[0].mode = S_IFDIR|S_IRUGO|S_IXUGO;
974 	init_header(&new->header, set->dir.header.root, set, node, table, 1);
975 
976 	return new;
977 }
978 
979 /**
980  * get_subdir - find or create a subdir with the specified name.
981  * @dir:  Directory to create the subdirectory in
982  * @name: The name of the subdirectory to find or create
983  * @namelen: The length of name
984  *
985  * Takes a directory with an elevated reference count so we know that
986  * if we drop the lock the directory will not go away.  Upon success
987  * the reference is moved from @dir to the returned subdirectory.
988  * Upon error an error code is returned and the reference on @dir is
989  * simply dropped.
990  */
991 static struct ctl_dir *get_subdir(struct ctl_dir *dir,
992 				  const char *name, int namelen)
993 {
994 	struct ctl_table_set *set = dir->header.set;
995 	struct ctl_dir *subdir, *new = NULL;
996 	int err;
997 
998 	spin_lock(&sysctl_lock);
999 	subdir = find_subdir(dir, name, namelen);
1000 	if (!IS_ERR(subdir))
1001 		goto found;
1002 	if (PTR_ERR(subdir) != -ENOENT)
1003 		goto failed;
1004 
1005 	spin_unlock(&sysctl_lock);
1006 	new = new_dir(set, name, namelen);
1007 	spin_lock(&sysctl_lock);
1008 	subdir = ERR_PTR(-ENOMEM);
1009 	if (!new)
1010 		goto failed;
1011 
1012 	/* Was the subdir added while we dropped the lock? */
1013 	subdir = find_subdir(dir, name, namelen);
1014 	if (!IS_ERR(subdir))
1015 		goto found;
1016 	if (PTR_ERR(subdir) != -ENOENT)
1017 		goto failed;
1018 
1019 	/* Nope.  Use the our freshly made directory entry. */
1020 	err = insert_header(dir, &new->header);
1021 	subdir = ERR_PTR(err);
1022 	if (err)
1023 		goto failed;
1024 	subdir = new;
1025 found:
1026 	subdir->header.nreg++;
1027 failed:
1028 	if (IS_ERR(subdir)) {
1029 		pr_err("sysctl could not get directory: ");
1030 		sysctl_print_dir(dir);
1031 		pr_cont("%*.*s %ld\n", namelen, namelen, name,
1032 			PTR_ERR(subdir));
1033 	}
1034 	drop_sysctl_table(&dir->header);
1035 	if (new)
1036 		drop_sysctl_table(&new->header);
1037 	spin_unlock(&sysctl_lock);
1038 	return subdir;
1039 }
1040 
1041 static struct ctl_dir *xlate_dir(struct ctl_table_set *set, struct ctl_dir *dir)
1042 {
1043 	struct ctl_dir *parent;
1044 	const char *procname;
1045 	if (!dir->header.parent)
1046 		return &set->dir;
1047 	parent = xlate_dir(set, dir->header.parent);
1048 	if (IS_ERR(parent))
1049 		return parent;
1050 	procname = dir->header.ctl_table[0].procname;
1051 	return find_subdir(parent, procname, strlen(procname));
1052 }
1053 
1054 static int sysctl_follow_link(struct ctl_table_header **phead,
1055 	const struct ctl_table **pentry)
1056 {
1057 	struct ctl_table_header *head;
1058 	const struct ctl_table *entry;
1059 	struct ctl_table_root *root;
1060 	struct ctl_table_set *set;
1061 	struct ctl_dir *dir;
1062 	int ret;
1063 
1064 	spin_lock(&sysctl_lock);
1065 	root = (*pentry)->data;
1066 	set = lookup_header_set(root);
1067 	dir = xlate_dir(set, (*phead)->parent);
1068 	if (IS_ERR(dir))
1069 		ret = PTR_ERR(dir);
1070 	else {
1071 		const char *procname = (*pentry)->procname;
1072 		head = NULL;
1073 		entry = find_entry(&head, dir, procname, strlen(procname));
1074 		ret = -ENOENT;
1075 		if (entry && use_table(head)) {
1076 			unuse_table(*phead);
1077 			*phead = head;
1078 			*pentry = entry;
1079 			ret = 0;
1080 		}
1081 	}
1082 
1083 	spin_unlock(&sysctl_lock);
1084 	return ret;
1085 }
1086 
1087 static int sysctl_err(const char *path, const struct ctl_table *table, char *fmt, ...)
1088 {
1089 	struct va_format vaf;
1090 	va_list args;
1091 
1092 	va_start(args, fmt);
1093 	vaf.fmt = fmt;
1094 	vaf.va = &args;
1095 
1096 	pr_err("sysctl table check failed: %s/%s %pV\n",
1097 	       path, table->procname, &vaf);
1098 
1099 	va_end(args);
1100 	return -EINVAL;
1101 }
1102 
1103 static int sysctl_check_table_array(const char *path, const struct ctl_table *table)
1104 {
1105 	unsigned int extra;
1106 	int err = 0;
1107 
1108 	if ((table->proc_handler == proc_douintvec) ||
1109 	    (table->proc_handler == proc_douintvec_minmax)) {
1110 		if (table->maxlen != sizeof(unsigned int))
1111 			err |= sysctl_err(path, table, "array not allowed");
1112 	}
1113 
1114 	if (table->proc_handler == proc_dou8vec_minmax) {
1115 		if (table->maxlen != sizeof(u8))
1116 			err |= sysctl_err(path, table, "array not allowed");
1117 
1118 		if (table->extra1) {
1119 			extra = *(unsigned int *) table->extra1;
1120 			if (extra > 255U)
1121 				err |= sysctl_err(path, table,
1122 						"range value too large for proc_dou8vec_minmax");
1123 		}
1124 		if (table->extra2) {
1125 			extra = *(unsigned int *) table->extra2;
1126 			if (extra > 255U)
1127 				err |= sysctl_err(path, table,
1128 						"range value too large for proc_dou8vec_minmax");
1129 		}
1130 	}
1131 
1132 	if (table->proc_handler == proc_dobool) {
1133 		if (table->maxlen != sizeof(bool))
1134 			err |= sysctl_err(path, table, "array not allowed");
1135 	}
1136 
1137 	return err;
1138 }
1139 
1140 static int sysctl_check_table(const char *path, struct ctl_table_header *header)
1141 {
1142 	const struct ctl_table *entry;
1143 	int err = 0;
1144 	list_for_each_table_entry(entry, header) {
1145 		if (!entry->procname)
1146 			err |= sysctl_err(path, entry, "procname is null");
1147 		if ((entry->proc_handler == proc_dostring) ||
1148 		    (entry->proc_handler == proc_dobool) ||
1149 		    (entry->proc_handler == proc_dointvec) ||
1150 		    (entry->proc_handler == proc_douintvec) ||
1151 		    (entry->proc_handler == proc_douintvec_minmax) ||
1152 		    (entry->proc_handler == proc_dointvec_minmax) ||
1153 		    (entry->proc_handler == proc_dou8vec_minmax) ||
1154 		    (entry->proc_handler == proc_dointvec_jiffies) ||
1155 		    (entry->proc_handler == proc_dointvec_userhz_jiffies) ||
1156 		    (entry->proc_handler == proc_dointvec_ms_jiffies) ||
1157 		    (entry->proc_handler == proc_doulongvec_minmax) ||
1158 		    (entry->proc_handler == proc_doulongvec_ms_jiffies_minmax)) {
1159 			if (!entry->data)
1160 				err |= sysctl_err(path, entry, "No data");
1161 			if (!entry->maxlen)
1162 				err |= sysctl_err(path, entry, "No maxlen");
1163 			else
1164 				err |= sysctl_check_table_array(path, entry);
1165 		}
1166 		if (!entry->proc_handler)
1167 			err |= sysctl_err(path, entry, "No proc_handler");
1168 
1169 		if ((entry->mode & (S_IRUGO|S_IWUGO)) != entry->mode)
1170 			err |= sysctl_err(path, entry, "bogus .mode 0%o",
1171 				entry->mode);
1172 	}
1173 	return err;
1174 }
1175 
1176 static struct ctl_table_header *new_links(struct ctl_dir *dir, struct ctl_table_header *head)
1177 {
1178 	struct ctl_table *link_table, *link;
1179 	struct ctl_table_header *links;
1180 	const struct ctl_table *entry;
1181 	struct ctl_node *node;
1182 	char *link_name;
1183 	int name_bytes;
1184 
1185 	name_bytes = 0;
1186 	list_for_each_table_entry(entry, head) {
1187 		name_bytes += strlen(entry->procname) + 1;
1188 	}
1189 
1190 	links = kzalloc(sizeof(struct ctl_table_header) +
1191 			sizeof(struct ctl_node)*head->ctl_table_size +
1192 			sizeof(struct ctl_table)*head->ctl_table_size +
1193 			name_bytes,
1194 			GFP_KERNEL);
1195 
1196 	if (!links)
1197 		return NULL;
1198 
1199 	node = (struct ctl_node *)(links + 1);
1200 	link_table = (struct ctl_table *)(node + head->ctl_table_size);
1201 	link_name = (char *)(link_table + head->ctl_table_size);
1202 	link = link_table;
1203 
1204 	list_for_each_table_entry(entry, head) {
1205 		int len = strlen(entry->procname) + 1;
1206 		memcpy(link_name, entry->procname, len);
1207 		link->procname = link_name;
1208 		link->mode = S_IFLNK|S_IRWXUGO;
1209 		link->data = head->root;
1210 		link_name += len;
1211 		link++;
1212 	}
1213 	init_header(links, dir->header.root, dir->header.set, node, link_table,
1214 		    head->ctl_table_size);
1215 	links->nreg = head->ctl_table_size;
1216 
1217 	return links;
1218 }
1219 
1220 static bool get_links(struct ctl_dir *dir,
1221 		      struct ctl_table_header *header,
1222 		      struct ctl_table_root *link_root)
1223 {
1224 	struct ctl_table_header *tmp_head;
1225 	const struct ctl_table *entry, *link;
1226 
1227 	if (header->ctl_table_size == 0 ||
1228 	    sysctl_is_perm_empty_ctl_header(header))
1229 		return true;
1230 
1231 	/* Are there links available for every entry in table? */
1232 	list_for_each_table_entry(entry, header) {
1233 		const char *procname = entry->procname;
1234 		link = find_entry(&tmp_head, dir, procname, strlen(procname));
1235 		if (!link)
1236 			return false;
1237 		if (S_ISDIR(link->mode) && S_ISDIR(entry->mode))
1238 			continue;
1239 		if (S_ISLNK(link->mode) && (link->data == link_root))
1240 			continue;
1241 		return false;
1242 	}
1243 
1244 	/* The checks passed.  Increase the registration count on the links */
1245 	list_for_each_table_entry(entry, header) {
1246 		const char *procname = entry->procname;
1247 		link = find_entry(&tmp_head, dir, procname, strlen(procname));
1248 		tmp_head->nreg++;
1249 	}
1250 	return true;
1251 }
1252 
1253 static int insert_links(struct ctl_table_header *head)
1254 {
1255 	struct ctl_table_set *root_set = &sysctl_table_root.default_set;
1256 	struct ctl_dir *core_parent;
1257 	struct ctl_table_header *links;
1258 	int err;
1259 
1260 	if (head->set == root_set)
1261 		return 0;
1262 
1263 	core_parent = xlate_dir(root_set, head->parent);
1264 	if (IS_ERR(core_parent))
1265 		return 0;
1266 
1267 	if (get_links(core_parent, head, head->root))
1268 		return 0;
1269 
1270 	core_parent->header.nreg++;
1271 	spin_unlock(&sysctl_lock);
1272 
1273 	links = new_links(core_parent, head);
1274 
1275 	spin_lock(&sysctl_lock);
1276 	err = -ENOMEM;
1277 	if (!links)
1278 		goto out;
1279 
1280 	err = 0;
1281 	if (get_links(core_parent, head, head->root)) {
1282 		kfree(links);
1283 		goto out;
1284 	}
1285 
1286 	err = insert_header(core_parent, links);
1287 	if (err)
1288 		kfree(links);
1289 out:
1290 	drop_sysctl_table(&core_parent->header);
1291 	return err;
1292 }
1293 
1294 /* Find the directory for the ctl_table. If one is not found create it. */
1295 static struct ctl_dir *sysctl_mkdir_p(struct ctl_dir *dir, const char *path)
1296 {
1297 	const char *name, *nextname;
1298 
1299 	for (name = path; name; name = nextname) {
1300 		int namelen;
1301 		nextname = strchr(name, '/');
1302 		if (nextname) {
1303 			namelen = nextname - name;
1304 			nextname++;
1305 		} else {
1306 			namelen = strlen(name);
1307 		}
1308 		if (namelen == 0)
1309 			continue;
1310 
1311 		/*
1312 		 * namelen ensures if name is "foo/bar/yay" only foo is
1313 		 * registered first. We traverse as if using mkdir -p and
1314 		 * return a ctl_dir for the last directory entry.
1315 		 */
1316 		dir = get_subdir(dir, name, namelen);
1317 		if (IS_ERR(dir))
1318 			break;
1319 	}
1320 	return dir;
1321 }
1322 
1323 /**
1324  * __register_sysctl_table - register a leaf sysctl table
1325  * @set: Sysctl tree to register on
1326  * @path: The path to the directory the sysctl table is in.
1327  *
1328  * @table: the top-level table structure. This table should not be free'd
1329  *         after registration. So it should not be used on stack. It can either
1330  *         be a global or dynamically allocated by the caller and free'd later
1331  *         after sysctl unregistration.
1332  * @table_size : The number of elements in table
1333  *
1334  * Register a sysctl table hierarchy. @table should be a filled in ctl_table
1335  * array.
1336  *
1337  * The members of the &struct ctl_table structure are used as follows:
1338  * procname - the name of the sysctl file under /proc/sys. Set to %NULL to not
1339  *            enter a sysctl file
1340  * data     - a pointer to data for use by proc_handler
1341  * maxlen   - the maximum size in bytes of the data
1342  * mode     - the file permissions for the /proc/sys file
1343  * type     - Defines the target type (described in struct definition)
1344  * proc_handler - the text handler routine (described below)
1345  *
1346  * extra1, extra2 - extra pointers usable by the proc handler routines
1347  * XXX: we should eventually modify these to use long min / max [0]
1348  * [0] https://lkml.kernel.org/87zgpte9o4.fsf@email.froward.int.ebiederm.org
1349  *
1350  * Leaf nodes in the sysctl tree will be represented by a single file
1351  * under /proc; non-leaf nodes are not allowed.
1352  *
1353  * There must be a proc_handler routine for any terminal nodes.
1354  * Several default handlers are available to cover common cases -
1355  *
1356  * proc_dostring(), proc_dointvec(), proc_dointvec_jiffies(),
1357  * proc_dointvec_userhz_jiffies(), proc_dointvec_minmax(),
1358  * proc_doulongvec_ms_jiffies_minmax(), proc_doulongvec_minmax()
1359  *
1360  * It is the handler's job to read the input buffer from user memory
1361  * and process it. The handler should return 0 on success.
1362  *
1363  * This routine returns %NULL on a failure to register, and a pointer
1364  * to the table header on success.
1365  */
1366 struct ctl_table_header *__register_sysctl_table(
1367 	struct ctl_table_set *set,
1368 	const char *path, const struct ctl_table *table, size_t table_size)
1369 {
1370 	struct ctl_table_root *root = set->dir.header.root;
1371 	struct ctl_table_header *header;
1372 	struct ctl_dir *dir;
1373 	struct ctl_node *node;
1374 
1375 	header = kzalloc(sizeof(struct ctl_table_header) +
1376 			 sizeof(struct ctl_node)*table_size, GFP_KERNEL_ACCOUNT);
1377 	if (!header)
1378 		return NULL;
1379 
1380 	node = (struct ctl_node *)(header + 1);
1381 	init_header(header, root, set, node, table, table_size);
1382 	if (sysctl_check_table(path, header))
1383 		goto fail;
1384 
1385 	spin_lock(&sysctl_lock);
1386 	dir = &set->dir;
1387 	/* Reference moved down the directory tree get_subdir */
1388 	dir->header.nreg++;
1389 	spin_unlock(&sysctl_lock);
1390 
1391 	dir = sysctl_mkdir_p(dir, path);
1392 	if (IS_ERR(dir))
1393 		goto fail;
1394 	spin_lock(&sysctl_lock);
1395 	if (insert_header(dir, header))
1396 		goto fail_put_dir_locked;
1397 
1398 	drop_sysctl_table(&dir->header);
1399 	spin_unlock(&sysctl_lock);
1400 
1401 	return header;
1402 
1403 fail_put_dir_locked:
1404 	drop_sysctl_table(&dir->header);
1405 	spin_unlock(&sysctl_lock);
1406 fail:
1407 	kfree(header);
1408 	return NULL;
1409 }
1410 
1411 /**
1412  * register_sysctl_sz - register a sysctl table
1413  * @path: The path to the directory the sysctl table is in. If the path
1414  * 	doesn't exist we will create it for you.
1415  * @table: the table structure. The calller must ensure the life of the @table
1416  * 	will be kept during the lifetime use of the syctl. It must not be freed
1417  * 	until unregister_sysctl_table() is called with the given returned table
1418  * 	with this registration. If your code is non modular then you don't need
1419  * 	to call unregister_sysctl_table() and can instead use something like
1420  * 	register_sysctl_init() which does not care for the result of the syctl
1421  * 	registration.
1422  * @table_size: The number of elements in table.
1423  *
1424  * Register a sysctl table. @table should be a filled in ctl_table
1425  * array. A completely 0 filled entry terminates the table.
1426  *
1427  * See __register_sysctl_table for more details.
1428  */
1429 struct ctl_table_header *register_sysctl_sz(const char *path, const struct ctl_table *table,
1430 					    size_t table_size)
1431 {
1432 	return __register_sysctl_table(&sysctl_table_root.default_set,
1433 					path, table, table_size);
1434 }
1435 EXPORT_SYMBOL(register_sysctl_sz);
1436 
1437 /**
1438  * __register_sysctl_init() - register sysctl table to path
1439  * @path: path name for sysctl base. If that path doesn't exist we will create
1440  * 	it for you.
1441  * @table: This is the sysctl table that needs to be registered to the path.
1442  * 	The caller must ensure the life of the @table will be kept during the
1443  * 	lifetime use of the sysctl.
1444  * @table_name: The name of sysctl table, only used for log printing when
1445  *              registration fails
1446  * @table_size: The number of elements in table
1447  *
1448  * The sysctl interface is used by userspace to query or modify at runtime
1449  * a predefined value set on a variable. These variables however have default
1450  * values pre-set. Code which depends on these variables will always work even
1451  * if register_sysctl() fails. If register_sysctl() fails you'd just loose the
1452  * ability to query or modify the sysctls dynamically at run time. Chances of
1453  * register_sysctl() failing on init are extremely low, and so for both reasons
1454  * this function does not return any error as it is used by initialization code.
1455  *
1456  * Context: if your base directory does not exist it will be created for you.
1457  */
1458 void __init __register_sysctl_init(const char *path, const struct ctl_table *table,
1459 				 const char *table_name, size_t table_size)
1460 {
1461 	struct ctl_table_header *hdr = register_sysctl_sz(path, table, table_size);
1462 
1463 	if (unlikely(!hdr)) {
1464 		pr_err("failed when register_sysctl_sz %s to %s\n", table_name, path);
1465 		return;
1466 	}
1467 	kmemleak_not_leak(hdr);
1468 }
1469 
1470 static void put_links(struct ctl_table_header *header)
1471 {
1472 	struct ctl_table_set *root_set = &sysctl_table_root.default_set;
1473 	struct ctl_table_root *root = header->root;
1474 	struct ctl_dir *parent = header->parent;
1475 	struct ctl_dir *core_parent;
1476 	const struct ctl_table *entry;
1477 
1478 	if (header->set == root_set)
1479 		return;
1480 
1481 	core_parent = xlate_dir(root_set, parent);
1482 	if (IS_ERR(core_parent))
1483 		return;
1484 
1485 	list_for_each_table_entry(entry, header) {
1486 		struct ctl_table_header *link_head;
1487 		const struct ctl_table *link;
1488 		const char *name = entry->procname;
1489 
1490 		link = find_entry(&link_head, core_parent, name, strlen(name));
1491 		if (link &&
1492 		    ((S_ISDIR(link->mode) && S_ISDIR(entry->mode)) ||
1493 		     (S_ISLNK(link->mode) && (link->data == root)))) {
1494 			drop_sysctl_table(link_head);
1495 		}
1496 		else {
1497 			pr_err("sysctl link missing during unregister: ");
1498 			sysctl_print_dir(parent);
1499 			pr_cont("%s\n", name);
1500 		}
1501 	}
1502 }
1503 
1504 static void drop_sysctl_table(struct ctl_table_header *header)
1505 {
1506 	struct ctl_dir *parent = header->parent;
1507 
1508 	if (--header->nreg)
1509 		return;
1510 
1511 	if (parent) {
1512 		put_links(header);
1513 		start_unregistering(header);
1514 	}
1515 
1516 	if (!--header->count)
1517 		kfree_rcu(header, rcu);
1518 
1519 	if (parent)
1520 		drop_sysctl_table(&parent->header);
1521 }
1522 
1523 /**
1524  * unregister_sysctl_table - unregister a sysctl table hierarchy
1525  * @header: the header returned from register_sysctl or __register_sysctl_table
1526  *
1527  * Unregisters the sysctl table and all children. proc entries may not
1528  * actually be removed until they are no longer used by anyone.
1529  */
1530 void unregister_sysctl_table(struct ctl_table_header * header)
1531 {
1532 	might_sleep();
1533 
1534 	if (header == NULL)
1535 		return;
1536 
1537 	spin_lock(&sysctl_lock);
1538 	drop_sysctl_table(header);
1539 	spin_unlock(&sysctl_lock);
1540 }
1541 EXPORT_SYMBOL(unregister_sysctl_table);
1542 
1543 void setup_sysctl_set(struct ctl_table_set *set,
1544 	struct ctl_table_root *root,
1545 	int (*is_seen)(struct ctl_table_set *))
1546 {
1547 	memset(set, 0, sizeof(*set));
1548 	set->is_seen = is_seen;
1549 	init_header(&set->dir.header, root, set, NULL, root_table, 1);
1550 }
1551 
1552 void retire_sysctl_set(struct ctl_table_set *set)
1553 {
1554 	WARN_ON(!RB_EMPTY_ROOT(&set->dir.root));
1555 }
1556 
1557 int __init proc_sys_init(void)
1558 {
1559 	struct proc_dir_entry *proc_sys_root;
1560 
1561 	proc_sys_root = proc_mkdir("sys", NULL);
1562 	proc_sys_root->proc_iops = &proc_sys_dir_operations;
1563 	proc_sys_root->proc_dir_ops = &proc_sys_dir_file_operations;
1564 	proc_sys_root->nlink = 0;
1565 
1566 	return sysctl_init_bases();
1567 }
1568 
1569 struct sysctl_alias {
1570 	const char *kernel_param;
1571 	const char *sysctl_param;
1572 };
1573 
1574 /*
1575  * Historically some settings had both sysctl and a command line parameter.
1576  * With the generic sysctl. parameter support, we can handle them at a single
1577  * place and only keep the historical name for compatibility. This is not meant
1578  * to add brand new aliases. When adding existing aliases, consider whether
1579  * the possibly different moment of changing the value (e.g. from early_param
1580  * to the moment do_sysctl_args() is called) is an issue for the specific
1581  * parameter.
1582  */
1583 static const struct sysctl_alias sysctl_aliases[] = {
1584 	{"hardlockup_all_cpu_backtrace",	"kernel.hardlockup_all_cpu_backtrace" },
1585 	{"hung_task_panic",			"kernel.hung_task_panic" },
1586 	{"numa_zonelist_order",			"vm.numa_zonelist_order" },
1587 	{"softlockup_all_cpu_backtrace",	"kernel.softlockup_all_cpu_backtrace" },
1588 	{ }
1589 };
1590 
1591 static const char *sysctl_find_alias(char *param)
1592 {
1593 	const struct sysctl_alias *alias;
1594 
1595 	for (alias = &sysctl_aliases[0]; alias->kernel_param != NULL; alias++) {
1596 		if (strcmp(alias->kernel_param, param) == 0)
1597 			return alias->sysctl_param;
1598 	}
1599 
1600 	return NULL;
1601 }
1602 
1603 bool sysctl_is_alias(char *param)
1604 {
1605 	const char *alias = sysctl_find_alias(param);
1606 
1607 	return alias != NULL;
1608 }
1609 
1610 /* Set sysctl value passed on kernel command line. */
1611 static int process_sysctl_arg(char *param, char *val,
1612 			       const char *unused, void *arg)
1613 {
1614 	char *path;
1615 	struct vfsmount **proc_mnt = arg;
1616 	struct file_system_type *proc_fs_type;
1617 	struct file *file;
1618 	int len;
1619 	int err;
1620 	loff_t pos = 0;
1621 	ssize_t wret;
1622 
1623 	if (strncmp(param, "sysctl", sizeof("sysctl") - 1) == 0) {
1624 		param += sizeof("sysctl") - 1;
1625 
1626 		if (param[0] != '/' && param[0] != '.')
1627 			return 0;
1628 
1629 		param++;
1630 	} else {
1631 		param = (char *) sysctl_find_alias(param);
1632 		if (!param)
1633 			return 0;
1634 	}
1635 
1636 	if (!val)
1637 		return -EINVAL;
1638 	len = strlen(val);
1639 	if (len == 0)
1640 		return -EINVAL;
1641 
1642 	/*
1643 	 * To set sysctl options, we use a temporary mount of proc, look up the
1644 	 * respective sys/ file and write to it. To avoid mounting it when no
1645 	 * options were given, we mount it only when the first sysctl option is
1646 	 * found. Why not a persistent mount? There are problems with a
1647 	 * persistent mount of proc in that it forces userspace not to use any
1648 	 * proc mount options.
1649 	 */
1650 	if (!*proc_mnt) {
1651 		proc_fs_type = get_fs_type("proc");
1652 		if (!proc_fs_type) {
1653 			pr_err("Failed to find procfs to set sysctl from command line\n");
1654 			return 0;
1655 		}
1656 		*proc_mnt = kern_mount(proc_fs_type);
1657 		put_filesystem(proc_fs_type);
1658 		if (IS_ERR(*proc_mnt)) {
1659 			pr_err("Failed to mount procfs to set sysctl from command line\n");
1660 			return 0;
1661 		}
1662 	}
1663 
1664 	path = kasprintf(GFP_KERNEL, "sys/%s", param);
1665 	if (!path)
1666 		panic("%s: Failed to allocate path for %s\n", __func__, param);
1667 	strreplace(path, '.', '/');
1668 
1669 	file = file_open_root_mnt(*proc_mnt, path, O_WRONLY, 0);
1670 	if (IS_ERR(file)) {
1671 		err = PTR_ERR(file);
1672 		if (err == -ENOENT)
1673 			pr_err("Failed to set sysctl parameter '%s=%s': parameter not found\n",
1674 				param, val);
1675 		else if (err == -EACCES)
1676 			pr_err("Failed to set sysctl parameter '%s=%s': permission denied (read-only?)\n",
1677 				param, val);
1678 		else
1679 			pr_err("Error %pe opening proc file to set sysctl parameter '%s=%s'\n",
1680 				file, param, val);
1681 		goto out;
1682 	}
1683 	wret = kernel_write(file, val, len, &pos);
1684 	if (wret < 0) {
1685 		err = wret;
1686 		if (err == -EINVAL)
1687 			pr_err("Failed to set sysctl parameter '%s=%s': invalid value\n",
1688 				param, val);
1689 		else
1690 			pr_err("Error %pe writing to proc file to set sysctl parameter '%s=%s'\n",
1691 				ERR_PTR(err), param, val);
1692 	} else if (wret != len) {
1693 		pr_err("Wrote only %zd bytes of %d writing to proc file %s to set sysctl parameter '%s=%s\n",
1694 			wret, len, path, param, val);
1695 	}
1696 
1697 	err = filp_close(file, NULL);
1698 	if (err)
1699 		pr_err("Error %pe closing proc file to set sysctl parameter '%s=%s\n",
1700 			ERR_PTR(err), param, val);
1701 out:
1702 	kfree(path);
1703 	return 0;
1704 }
1705 
1706 void do_sysctl_args(void)
1707 {
1708 	char *command_line;
1709 	struct vfsmount *proc_mnt = NULL;
1710 
1711 	command_line = kstrdup(saved_command_line, GFP_KERNEL);
1712 	if (!command_line)
1713 		panic("%s: Failed to allocate copy of command line\n", __func__);
1714 
1715 	parse_args("Setting sysctl args", command_line,
1716 		   NULL, 0, -1, -1, &proc_mnt, process_sysctl_arg);
1717 
1718 	if (proc_mnt)
1719 		kern_unmount(proc_mnt);
1720 
1721 	kfree(command_line);
1722 }
1723