xref: /linux/kernel/sysctl.c (revision 98b8788ae91694499d1995035625bea16a4db0c4)
1 /*
2  * sysctl.c: General linux system control interface
3  *
4  * Begun 24 March 1995, Stephen Tweedie
5  * Added /proc support, Dec 1995
6  * Added bdflush entry and intvec min/max checking, 2/23/96, Tom Dyas.
7  * Added hooks for /proc/sys/net (minor, minor patch), 96/4/1, Mike Shaver.
8  * Added kernel/java-{interpreter,appletviewer}, 96/5/10, Mike Shaver.
9  * Dynamic registration fixes, Stephen Tweedie.
10  * Added kswapd-interval, ctrl-alt-del, printk stuff, 1/8/97, Chris Horn.
11  * Made sysctl support optional via CONFIG_SYSCTL, 1/10/97, Chris
12  *  Horn.
13  * Added proc_doulongvec_ms_jiffies_minmax, 09/08/99, Carlos H. Bauer.
14  * Added proc_doulongvec_minmax, 09/08/99, Carlos H. Bauer.
15  * Changed linked lists to use list.h instead of lists.h, 02/24/00, Bill
16  *  Wendling.
17  * The list_for_each() macro wasn't appropriate for the sysctl loop.
18  *  Removed it and replaced it with older style, 03/23/00, Bill Wendling
19  */
20 
21 #include <linux/module.h>
22 #include <linux/mm.h>
23 #include <linux/swap.h>
24 #include <linux/slab.h>
25 #include <linux/sysctl.h>
26 #include <linux/proc_fs.h>
27 #include <linux/security.h>
28 #include <linux/ctype.h>
29 #include <linux/kmemcheck.h>
30 #include <linux/fs.h>
31 #include <linux/init.h>
32 #include <linux/kernel.h>
33 #include <linux/kobject.h>
34 #include <linux/net.h>
35 #include <linux/sysrq.h>
36 #include <linux/highuid.h>
37 #include <linux/writeback.h>
38 #include <linux/ratelimit.h>
39 #include <linux/hugetlb.h>
40 #include <linux/initrd.h>
41 #include <linux/key.h>
42 #include <linux/times.h>
43 #include <linux/limits.h>
44 #include <linux/dcache.h>
45 #include <linux/syscalls.h>
46 #include <linux/vmstat.h>
47 #include <linux/nfs_fs.h>
48 #include <linux/acpi.h>
49 #include <linux/reboot.h>
50 #include <linux/ftrace.h>
51 #include <linux/slow-work.h>
52 #include <linux/perf_event.h>
53 
54 #include <asm/uaccess.h>
55 #include <asm/processor.h>
56 
57 #ifdef CONFIG_X86
58 #include <asm/nmi.h>
59 #include <asm/stacktrace.h>
60 #include <asm/io.h>
61 #endif
62 
63 
64 #if defined(CONFIG_SYSCTL)
65 
66 /* External variables not in a header file. */
67 extern int C_A_D;
68 extern int print_fatal_signals;
69 extern int sysctl_overcommit_memory;
70 extern int sysctl_overcommit_ratio;
71 extern int sysctl_panic_on_oom;
72 extern int sysctl_oom_kill_allocating_task;
73 extern int sysctl_oom_dump_tasks;
74 extern int max_threads;
75 extern int core_uses_pid;
76 extern int suid_dumpable;
77 extern char core_pattern[];
78 extern unsigned int core_pipe_limit;
79 extern int pid_max;
80 extern int min_free_kbytes;
81 extern int pid_max_min, pid_max_max;
82 extern int sysctl_drop_caches;
83 extern int percpu_pagelist_fraction;
84 extern int compat_log;
85 extern int latencytop_enabled;
86 extern int sysctl_nr_open_min, sysctl_nr_open_max;
87 #ifndef CONFIG_MMU
88 extern int sysctl_nr_trim_pages;
89 #endif
90 #ifdef CONFIG_RCU_TORTURE_TEST
91 extern int rcutorture_runnable;
92 #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
93 #ifdef CONFIG_BLOCK
94 extern int blk_iopoll_enabled;
95 #endif
96 
97 /* Constants used for minimum and  maximum */
98 #ifdef CONFIG_DETECT_SOFTLOCKUP
99 static int sixty = 60;
100 static int neg_one = -1;
101 #endif
102 
103 static int zero;
104 static int __maybe_unused one = 1;
105 static int __maybe_unused two = 2;
106 static unsigned long one_ul = 1;
107 static int one_hundred = 100;
108 #ifdef CONFIG_PRINTK
109 static int ten_thousand = 10000;
110 #endif
111 
112 /* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
113 static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;
114 
115 /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
116 static int maxolduid = 65535;
117 static int minolduid;
118 static int min_percpu_pagelist_fract = 8;
119 
120 static int ngroups_max = NGROUPS_MAX;
121 
122 #ifdef CONFIG_MODULES
123 extern char modprobe_path[];
124 extern int modules_disabled;
125 #endif
126 #ifdef CONFIG_CHR_DEV_SG
127 extern int sg_big_buff;
128 #endif
129 
130 #ifdef CONFIG_SPARC
131 #include <asm/system.h>
132 #endif
133 
134 #ifdef CONFIG_SPARC64
135 extern int sysctl_tsb_ratio;
136 #endif
137 
138 #ifdef __hppa__
139 extern int pwrsw_enabled;
140 extern int unaligned_enabled;
141 #endif
142 
143 #ifdef CONFIG_S390
144 #ifdef CONFIG_MATHEMU
145 extern int sysctl_ieee_emulation_warnings;
146 #endif
147 extern int sysctl_userprocess_debug;
148 extern int spin_retry;
149 #endif
150 
151 #ifdef CONFIG_BSD_PROCESS_ACCT
152 extern int acct_parm[];
153 #endif
154 
155 #ifdef CONFIG_IA64
156 extern int no_unaligned_warning;
157 extern int unaligned_dump_stack;
158 #endif
159 
160 extern struct ratelimit_state printk_ratelimit_state;
161 
162 #ifdef CONFIG_RT_MUTEXES
163 extern int max_lock_depth;
164 #endif
165 
166 #ifdef CONFIG_PROC_SYSCTL
167 static int proc_do_cad_pid(struct ctl_table *table, int write,
168 		  void __user *buffer, size_t *lenp, loff_t *ppos);
169 static int proc_taint(struct ctl_table *table, int write,
170 			       void __user *buffer, size_t *lenp, loff_t *ppos);
171 #endif
172 
173 static struct ctl_table root_table[];
174 static struct ctl_table_root sysctl_table_root;
175 static struct ctl_table_header root_table_header = {
176 	.count = 1,
177 	.ctl_table = root_table,
178 	.ctl_entry = LIST_HEAD_INIT(sysctl_table_root.default_set.list),
179 	.root = &sysctl_table_root,
180 	.set = &sysctl_table_root.default_set,
181 };
182 static struct ctl_table_root sysctl_table_root = {
183 	.root_list = LIST_HEAD_INIT(sysctl_table_root.root_list),
184 	.default_set.list = LIST_HEAD_INIT(root_table_header.ctl_entry),
185 };
186 
187 static struct ctl_table kern_table[];
188 static struct ctl_table vm_table[];
189 static struct ctl_table fs_table[];
190 static struct ctl_table debug_table[];
191 static struct ctl_table dev_table[];
192 extern struct ctl_table random_table[];
193 #ifdef CONFIG_INOTIFY_USER
194 extern struct ctl_table inotify_table[];
195 #endif
196 #ifdef CONFIG_EPOLL
197 extern struct ctl_table epoll_table[];
198 #endif
199 
200 #ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
201 int sysctl_legacy_va_layout;
202 #endif
203 
204 extern int prove_locking;
205 extern int lock_stat;
206 
207 /* The default sysctl tables: */
208 
209 static struct ctl_table root_table[] = {
210 	{
211 		.procname	= "kernel",
212 		.mode		= 0555,
213 		.child		= kern_table,
214 	},
215 	{
216 		.procname	= "vm",
217 		.mode		= 0555,
218 		.child		= vm_table,
219 	},
220 	{
221 		.procname	= "fs",
222 		.mode		= 0555,
223 		.child		= fs_table,
224 	},
225 	{
226 		.procname	= "debug",
227 		.mode		= 0555,
228 		.child		= debug_table,
229 	},
230 	{
231 		.procname	= "dev",
232 		.mode		= 0555,
233 		.child		= dev_table,
234 	},
235 /*
236  * NOTE: do not add new entries to this table unless you have read
237  * Documentation/sysctl/ctl_unnumbered.txt
238  */
239 	{ }
240 };
241 
242 #ifdef CONFIG_SCHED_DEBUG
243 static int min_sched_granularity_ns = 100000;		/* 100 usecs */
244 static int max_sched_granularity_ns = NSEC_PER_SEC;	/* 1 second */
245 static int min_wakeup_granularity_ns;			/* 0 usecs */
246 static int max_wakeup_granularity_ns = NSEC_PER_SEC;	/* 1 second */
247 #endif
248 
249 static struct ctl_table kern_table[] = {
250 	{
251 		.procname	= "sched_child_runs_first",
252 		.data		= &sysctl_sched_child_runs_first,
253 		.maxlen		= sizeof(unsigned int),
254 		.mode		= 0644,
255 		.proc_handler	= proc_dointvec,
256 	},
257 #ifdef CONFIG_SCHED_DEBUG
258 	{
259 		.procname	= "sched_min_granularity_ns",
260 		.data		= &sysctl_sched_min_granularity,
261 		.maxlen		= sizeof(unsigned int),
262 		.mode		= 0644,
263 		.proc_handler	= sched_nr_latency_handler,
264 		.extra1		= &min_sched_granularity_ns,
265 		.extra2		= &max_sched_granularity_ns,
266 	},
267 	{
268 		.procname	= "sched_latency_ns",
269 		.data		= &sysctl_sched_latency,
270 		.maxlen		= sizeof(unsigned int),
271 		.mode		= 0644,
272 		.proc_handler	= sched_nr_latency_handler,
273 		.extra1		= &min_sched_granularity_ns,
274 		.extra2		= &max_sched_granularity_ns,
275 	},
276 	{
277 		.procname	= "sched_wakeup_granularity_ns",
278 		.data		= &sysctl_sched_wakeup_granularity,
279 		.maxlen		= sizeof(unsigned int),
280 		.mode		= 0644,
281 		.proc_handler	= proc_dointvec_minmax,
282 		.extra1		= &min_wakeup_granularity_ns,
283 		.extra2		= &max_wakeup_granularity_ns,
284 	},
285 	{
286 		.procname	= "sched_shares_ratelimit",
287 		.data		= &sysctl_sched_shares_ratelimit,
288 		.maxlen		= sizeof(unsigned int),
289 		.mode		= 0644,
290 		.proc_handler	= proc_dointvec,
291 	},
292 	{
293 		.procname	= "sched_shares_thresh",
294 		.data		= &sysctl_sched_shares_thresh,
295 		.maxlen		= sizeof(unsigned int),
296 		.mode		= 0644,
297 		.proc_handler	= proc_dointvec_minmax,
298 		.extra1		= &zero,
299 	},
300 	{
301 		.procname	= "sched_features",
302 		.data		= &sysctl_sched_features,
303 		.maxlen		= sizeof(unsigned int),
304 		.mode		= 0644,
305 		.proc_handler	= proc_dointvec,
306 	},
307 	{
308 		.procname	= "sched_migration_cost",
309 		.data		= &sysctl_sched_migration_cost,
310 		.maxlen		= sizeof(unsigned int),
311 		.mode		= 0644,
312 		.proc_handler	= proc_dointvec,
313 	},
314 	{
315 		.procname	= "sched_nr_migrate",
316 		.data		= &sysctl_sched_nr_migrate,
317 		.maxlen		= sizeof(unsigned int),
318 		.mode		= 0644,
319 		.proc_handler	= proc_dointvec,
320 	},
321 	{
322 		.procname	= "sched_time_avg",
323 		.data		= &sysctl_sched_time_avg,
324 		.maxlen		= sizeof(unsigned int),
325 		.mode		= 0644,
326 		.proc_handler	= proc_dointvec,
327 	},
328 	{
329 		.procname	= "timer_migration",
330 		.data		= &sysctl_timer_migration,
331 		.maxlen		= sizeof(unsigned int),
332 		.mode		= 0644,
333 		.proc_handler	= proc_dointvec_minmax,
334 		.extra1		= &zero,
335 		.extra2		= &one,
336 	},
337 #endif
338 	{
339 		.procname	= "sched_rt_period_us",
340 		.data		= &sysctl_sched_rt_period,
341 		.maxlen		= sizeof(unsigned int),
342 		.mode		= 0644,
343 		.proc_handler	= sched_rt_handler,
344 	},
345 	{
346 		.procname	= "sched_rt_runtime_us",
347 		.data		= &sysctl_sched_rt_runtime,
348 		.maxlen		= sizeof(int),
349 		.mode		= 0644,
350 		.proc_handler	= sched_rt_handler,
351 	},
352 	{
353 		.procname	= "sched_compat_yield",
354 		.data		= &sysctl_sched_compat_yield,
355 		.maxlen		= sizeof(unsigned int),
356 		.mode		= 0644,
357 		.proc_handler	= proc_dointvec,
358 	},
359 #ifdef CONFIG_PROVE_LOCKING
360 	{
361 		.procname	= "prove_locking",
362 		.data		= &prove_locking,
363 		.maxlen		= sizeof(int),
364 		.mode		= 0644,
365 		.proc_handler	= proc_dointvec,
366 	},
367 #endif
368 #ifdef CONFIG_LOCK_STAT
369 	{
370 		.procname	= "lock_stat",
371 		.data		= &lock_stat,
372 		.maxlen		= sizeof(int),
373 		.mode		= 0644,
374 		.proc_handler	= proc_dointvec,
375 	},
376 #endif
377 	{
378 		.procname	= "panic",
379 		.data		= &panic_timeout,
380 		.maxlen		= sizeof(int),
381 		.mode		= 0644,
382 		.proc_handler	= proc_dointvec,
383 	},
384 	{
385 		.procname	= "core_uses_pid",
386 		.data		= &core_uses_pid,
387 		.maxlen		= sizeof(int),
388 		.mode		= 0644,
389 		.proc_handler	= proc_dointvec,
390 	},
391 	{
392 		.procname	= "core_pattern",
393 		.data		= core_pattern,
394 		.maxlen		= CORENAME_MAX_SIZE,
395 		.mode		= 0644,
396 		.proc_handler	= proc_dostring,
397 	},
398 	{
399 		.procname	= "core_pipe_limit",
400 		.data		= &core_pipe_limit,
401 		.maxlen		= sizeof(unsigned int),
402 		.mode		= 0644,
403 		.proc_handler	= proc_dointvec,
404 	},
405 #ifdef CONFIG_PROC_SYSCTL
406 	{
407 		.procname	= "tainted",
408 		.maxlen 	= sizeof(long),
409 		.mode		= 0644,
410 		.proc_handler	= proc_taint,
411 	},
412 #endif
413 #ifdef CONFIG_LATENCYTOP
414 	{
415 		.procname	= "latencytop",
416 		.data		= &latencytop_enabled,
417 		.maxlen		= sizeof(int),
418 		.mode		= 0644,
419 		.proc_handler	= proc_dointvec,
420 	},
421 #endif
422 #ifdef CONFIG_BLK_DEV_INITRD
423 	{
424 		.procname	= "real-root-dev",
425 		.data		= &real_root_dev,
426 		.maxlen		= sizeof(int),
427 		.mode		= 0644,
428 		.proc_handler	= proc_dointvec,
429 	},
430 #endif
431 	{
432 		.procname	= "print-fatal-signals",
433 		.data		= &print_fatal_signals,
434 		.maxlen		= sizeof(int),
435 		.mode		= 0644,
436 		.proc_handler	= proc_dointvec,
437 	},
438 #ifdef CONFIG_SPARC
439 	{
440 		.procname	= "reboot-cmd",
441 		.data		= reboot_command,
442 		.maxlen		= 256,
443 		.mode		= 0644,
444 		.proc_handler	= proc_dostring,
445 	},
446 	{
447 		.procname	= "stop-a",
448 		.data		= &stop_a_enabled,
449 		.maxlen		= sizeof (int),
450 		.mode		= 0644,
451 		.proc_handler	= proc_dointvec,
452 	},
453 	{
454 		.procname	= "scons-poweroff",
455 		.data		= &scons_pwroff,
456 		.maxlen		= sizeof (int),
457 		.mode		= 0644,
458 		.proc_handler	= proc_dointvec,
459 	},
460 #endif
461 #ifdef CONFIG_SPARC64
462 	{
463 		.procname	= "tsb-ratio",
464 		.data		= &sysctl_tsb_ratio,
465 		.maxlen		= sizeof (int),
466 		.mode		= 0644,
467 		.proc_handler	= proc_dointvec,
468 	},
469 #endif
470 #ifdef __hppa__
471 	{
472 		.procname	= "soft-power",
473 		.data		= &pwrsw_enabled,
474 		.maxlen		= sizeof (int),
475 	 	.mode		= 0644,
476 		.proc_handler	= proc_dointvec,
477 	},
478 	{
479 		.procname	= "unaligned-trap",
480 		.data		= &unaligned_enabled,
481 		.maxlen		= sizeof (int),
482 		.mode		= 0644,
483 		.proc_handler	= proc_dointvec,
484 	},
485 #endif
486 	{
487 		.procname	= "ctrl-alt-del",
488 		.data		= &C_A_D,
489 		.maxlen		= sizeof(int),
490 		.mode		= 0644,
491 		.proc_handler	= proc_dointvec,
492 	},
493 #ifdef CONFIG_FUNCTION_TRACER
494 	{
495 		.procname	= "ftrace_enabled",
496 		.data		= &ftrace_enabled,
497 		.maxlen		= sizeof(int),
498 		.mode		= 0644,
499 		.proc_handler	= ftrace_enable_sysctl,
500 	},
501 #endif
502 #ifdef CONFIG_STACK_TRACER
503 	{
504 		.procname	= "stack_tracer_enabled",
505 		.data		= &stack_tracer_enabled,
506 		.maxlen		= sizeof(int),
507 		.mode		= 0644,
508 		.proc_handler	= stack_trace_sysctl,
509 	},
510 #endif
511 #ifdef CONFIG_TRACING
512 	{
513 		.procname	= "ftrace_dump_on_oops",
514 		.data		= &ftrace_dump_on_oops,
515 		.maxlen		= sizeof(int),
516 		.mode		= 0644,
517 		.proc_handler	= proc_dointvec,
518 	},
519 #endif
520 #ifdef CONFIG_MODULES
521 	{
522 		.procname	= "modprobe",
523 		.data		= &modprobe_path,
524 		.maxlen		= KMOD_PATH_LEN,
525 		.mode		= 0644,
526 		.proc_handler	= proc_dostring,
527 	},
528 	{
529 		.procname	= "modules_disabled",
530 		.data		= &modules_disabled,
531 		.maxlen		= sizeof(int),
532 		.mode		= 0644,
533 		/* only handle a transition from default "0" to "1" */
534 		.proc_handler	= proc_dointvec_minmax,
535 		.extra1		= &one,
536 		.extra2		= &one,
537 	},
538 #endif
539 #if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)
540 	{
541 		.procname	= "hotplug",
542 		.data		= &uevent_helper,
543 		.maxlen		= UEVENT_HELPER_PATH_LEN,
544 		.mode		= 0644,
545 		.proc_handler	= proc_dostring,
546 	},
547 #endif
548 #ifdef CONFIG_CHR_DEV_SG
549 	{
550 		.procname	= "sg-big-buff",
551 		.data		= &sg_big_buff,
552 		.maxlen		= sizeof (int),
553 		.mode		= 0444,
554 		.proc_handler	= proc_dointvec,
555 	},
556 #endif
557 #ifdef CONFIG_BSD_PROCESS_ACCT
558 	{
559 		.procname	= "acct",
560 		.data		= &acct_parm,
561 		.maxlen		= 3*sizeof(int),
562 		.mode		= 0644,
563 		.proc_handler	= proc_dointvec,
564 	},
565 #endif
566 #ifdef CONFIG_MAGIC_SYSRQ
567 	{
568 		.procname	= "sysrq",
569 		.data		= &__sysrq_enabled,
570 		.maxlen		= sizeof (int),
571 		.mode		= 0644,
572 		.proc_handler	= proc_dointvec,
573 	},
574 #endif
575 #ifdef CONFIG_PROC_SYSCTL
576 	{
577 		.procname	= "cad_pid",
578 		.data		= NULL,
579 		.maxlen		= sizeof (int),
580 		.mode		= 0600,
581 		.proc_handler	= proc_do_cad_pid,
582 	},
583 #endif
584 	{
585 		.procname	= "threads-max",
586 		.data		= &max_threads,
587 		.maxlen		= sizeof(int),
588 		.mode		= 0644,
589 		.proc_handler	= proc_dointvec,
590 	},
591 	{
592 		.procname	= "random",
593 		.mode		= 0555,
594 		.child		= random_table,
595 	},
596 	{
597 		.procname	= "overflowuid",
598 		.data		= &overflowuid,
599 		.maxlen		= sizeof(int),
600 		.mode		= 0644,
601 		.proc_handler	= proc_dointvec_minmax,
602 		.extra1		= &minolduid,
603 		.extra2		= &maxolduid,
604 	},
605 	{
606 		.procname	= "overflowgid",
607 		.data		= &overflowgid,
608 		.maxlen		= sizeof(int),
609 		.mode		= 0644,
610 		.proc_handler	= proc_dointvec_minmax,
611 		.extra1		= &minolduid,
612 		.extra2		= &maxolduid,
613 	},
614 #ifdef CONFIG_S390
615 #ifdef CONFIG_MATHEMU
616 	{
617 		.procname	= "ieee_emulation_warnings",
618 		.data		= &sysctl_ieee_emulation_warnings,
619 		.maxlen		= sizeof(int),
620 		.mode		= 0644,
621 		.proc_handler	= proc_dointvec,
622 	},
623 #endif
624 	{
625 		.procname	= "userprocess_debug",
626 		.data		= &sysctl_userprocess_debug,
627 		.maxlen		= sizeof(int),
628 		.mode		= 0644,
629 		.proc_handler	= proc_dointvec,
630 	},
631 #endif
632 	{
633 		.procname	= "pid_max",
634 		.data		= &pid_max,
635 		.maxlen		= sizeof (int),
636 		.mode		= 0644,
637 		.proc_handler	= proc_dointvec_minmax,
638 		.extra1		= &pid_max_min,
639 		.extra2		= &pid_max_max,
640 	},
641 	{
642 		.procname	= "panic_on_oops",
643 		.data		= &panic_on_oops,
644 		.maxlen		= sizeof(int),
645 		.mode		= 0644,
646 		.proc_handler	= proc_dointvec,
647 	},
648 #if defined CONFIG_PRINTK
649 	{
650 		.procname	= "printk",
651 		.data		= &console_loglevel,
652 		.maxlen		= 4*sizeof(int),
653 		.mode		= 0644,
654 		.proc_handler	= proc_dointvec,
655 	},
656 	{
657 		.procname	= "printk_ratelimit",
658 		.data		= &printk_ratelimit_state.interval,
659 		.maxlen		= sizeof(int),
660 		.mode		= 0644,
661 		.proc_handler	= proc_dointvec_jiffies,
662 	},
663 	{
664 		.procname	= "printk_ratelimit_burst",
665 		.data		= &printk_ratelimit_state.burst,
666 		.maxlen		= sizeof(int),
667 		.mode		= 0644,
668 		.proc_handler	= proc_dointvec,
669 	},
670 	{
671 		.procname	= "printk_delay",
672 		.data		= &printk_delay_msec,
673 		.maxlen		= sizeof(int),
674 		.mode		= 0644,
675 		.proc_handler	= proc_dointvec_minmax,
676 		.extra1		= &zero,
677 		.extra2		= &ten_thousand,
678 	},
679 #endif
680 	{
681 		.procname	= "ngroups_max",
682 		.data		= &ngroups_max,
683 		.maxlen		= sizeof (int),
684 		.mode		= 0444,
685 		.proc_handler	= proc_dointvec,
686 	},
687 #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86)
688 	{
689 		.procname       = "unknown_nmi_panic",
690 		.data           = &unknown_nmi_panic,
691 		.maxlen         = sizeof (int),
692 		.mode           = 0644,
693 		.proc_handler   = proc_dointvec,
694 	},
695 	{
696 		.procname       = "nmi_watchdog",
697 		.data           = &nmi_watchdog_enabled,
698 		.maxlen         = sizeof (int),
699 		.mode           = 0644,
700 		.proc_handler   = proc_nmi_enabled,
701 	},
702 #endif
703 #if defined(CONFIG_X86)
704 	{
705 		.procname	= "panic_on_unrecovered_nmi",
706 		.data		= &panic_on_unrecovered_nmi,
707 		.maxlen		= sizeof(int),
708 		.mode		= 0644,
709 		.proc_handler	= proc_dointvec,
710 	},
711 	{
712 		.procname	= "panic_on_io_nmi",
713 		.data		= &panic_on_io_nmi,
714 		.maxlen		= sizeof(int),
715 		.mode		= 0644,
716 		.proc_handler	= proc_dointvec,
717 	},
718 	{
719 		.procname	= "bootloader_type",
720 		.data		= &bootloader_type,
721 		.maxlen		= sizeof (int),
722 		.mode		= 0444,
723 		.proc_handler	= proc_dointvec,
724 	},
725 	{
726 		.procname	= "bootloader_version",
727 		.data		= &bootloader_version,
728 		.maxlen		= sizeof (int),
729 		.mode		= 0444,
730 		.proc_handler	= proc_dointvec,
731 	},
732 	{
733 		.procname	= "kstack_depth_to_print",
734 		.data		= &kstack_depth_to_print,
735 		.maxlen		= sizeof(int),
736 		.mode		= 0644,
737 		.proc_handler	= proc_dointvec,
738 	},
739 	{
740 		.procname	= "io_delay_type",
741 		.data		= &io_delay_type,
742 		.maxlen		= sizeof(int),
743 		.mode		= 0644,
744 		.proc_handler	= proc_dointvec,
745 	},
746 #endif
747 #if defined(CONFIG_MMU)
748 	{
749 		.procname	= "randomize_va_space",
750 		.data		= &randomize_va_space,
751 		.maxlen		= sizeof(int),
752 		.mode		= 0644,
753 		.proc_handler	= proc_dointvec,
754 	},
755 #endif
756 #if defined(CONFIG_S390) && defined(CONFIG_SMP)
757 	{
758 		.procname	= "spin_retry",
759 		.data		= &spin_retry,
760 		.maxlen		= sizeof (int),
761 		.mode		= 0644,
762 		.proc_handler	= proc_dointvec,
763 	},
764 #endif
765 #if	defined(CONFIG_ACPI_SLEEP) && defined(CONFIG_X86)
766 	{
767 		.procname	= "acpi_video_flags",
768 		.data		= &acpi_realmode_flags,
769 		.maxlen		= sizeof (unsigned long),
770 		.mode		= 0644,
771 		.proc_handler	= proc_doulongvec_minmax,
772 	},
773 #endif
774 #ifdef CONFIG_IA64
775 	{
776 		.procname	= "ignore-unaligned-usertrap",
777 		.data		= &no_unaligned_warning,
778 		.maxlen		= sizeof (int),
779 	 	.mode		= 0644,
780 		.proc_handler	= proc_dointvec,
781 	},
782 	{
783 		.procname	= "unaligned-dump-stack",
784 		.data		= &unaligned_dump_stack,
785 		.maxlen		= sizeof (int),
786 		.mode		= 0644,
787 		.proc_handler	= proc_dointvec,
788 	},
789 #endif
790 #ifdef CONFIG_DETECT_SOFTLOCKUP
791 	{
792 		.procname	= "softlockup_panic",
793 		.data		= &softlockup_panic,
794 		.maxlen		= sizeof(int),
795 		.mode		= 0644,
796 		.proc_handler	= proc_dointvec_minmax,
797 		.extra1		= &zero,
798 		.extra2		= &one,
799 	},
800 	{
801 		.procname	= "softlockup_thresh",
802 		.data		= &softlockup_thresh,
803 		.maxlen		= sizeof(int),
804 		.mode		= 0644,
805 		.proc_handler	= proc_dosoftlockup_thresh,
806 		.extra1		= &neg_one,
807 		.extra2		= &sixty,
808 	},
809 #endif
810 #ifdef CONFIG_DETECT_HUNG_TASK
811 	{
812 		.procname	= "hung_task_panic",
813 		.data		= &sysctl_hung_task_panic,
814 		.maxlen		= sizeof(int),
815 		.mode		= 0644,
816 		.proc_handler	= proc_dointvec_minmax,
817 		.extra1		= &zero,
818 		.extra2		= &one,
819 	},
820 	{
821 		.procname	= "hung_task_check_count",
822 		.data		= &sysctl_hung_task_check_count,
823 		.maxlen		= sizeof(unsigned long),
824 		.mode		= 0644,
825 		.proc_handler	= proc_doulongvec_minmax,
826 	},
827 	{
828 		.procname	= "hung_task_timeout_secs",
829 		.data		= &sysctl_hung_task_timeout_secs,
830 		.maxlen		= sizeof(unsigned long),
831 		.mode		= 0644,
832 		.proc_handler	= proc_dohung_task_timeout_secs,
833 	},
834 	{
835 		.procname	= "hung_task_warnings",
836 		.data		= &sysctl_hung_task_warnings,
837 		.maxlen		= sizeof(unsigned long),
838 		.mode		= 0644,
839 		.proc_handler	= proc_doulongvec_minmax,
840 	},
841 #endif
842 #ifdef CONFIG_COMPAT
843 	{
844 		.procname	= "compat-log",
845 		.data		= &compat_log,
846 		.maxlen		= sizeof (int),
847 	 	.mode		= 0644,
848 		.proc_handler	= proc_dointvec,
849 	},
850 #endif
851 #ifdef CONFIG_RT_MUTEXES
852 	{
853 		.procname	= "max_lock_depth",
854 		.data		= &max_lock_depth,
855 		.maxlen		= sizeof(int),
856 		.mode		= 0644,
857 		.proc_handler	= proc_dointvec,
858 	},
859 #endif
860 	{
861 		.procname	= "poweroff_cmd",
862 		.data		= &poweroff_cmd,
863 		.maxlen		= POWEROFF_CMD_PATH_LEN,
864 		.mode		= 0644,
865 		.proc_handler	= proc_dostring,
866 	},
867 #ifdef CONFIG_KEYS
868 	{
869 		.procname	= "keys",
870 		.mode		= 0555,
871 		.child		= key_sysctls,
872 	},
873 #endif
874 #ifdef CONFIG_RCU_TORTURE_TEST
875 	{
876 		.procname       = "rcutorture_runnable",
877 		.data           = &rcutorture_runnable,
878 		.maxlen         = sizeof(int),
879 		.mode           = 0644,
880 		.proc_handler	= proc_dointvec,
881 	},
882 #endif
883 #ifdef CONFIG_SLOW_WORK
884 	{
885 		.procname	= "slow-work",
886 		.mode		= 0555,
887 		.child		= slow_work_sysctls,
888 	},
889 #endif
890 #ifdef CONFIG_PERF_EVENTS
891 	{
892 		.procname	= "perf_event_paranoid",
893 		.data		= &sysctl_perf_event_paranoid,
894 		.maxlen		= sizeof(sysctl_perf_event_paranoid),
895 		.mode		= 0644,
896 		.proc_handler	= proc_dointvec,
897 	},
898 	{
899 		.procname	= "perf_event_mlock_kb",
900 		.data		= &sysctl_perf_event_mlock,
901 		.maxlen		= sizeof(sysctl_perf_event_mlock),
902 		.mode		= 0644,
903 		.proc_handler	= proc_dointvec,
904 	},
905 	{
906 		.procname	= "perf_event_max_sample_rate",
907 		.data		= &sysctl_perf_event_sample_rate,
908 		.maxlen		= sizeof(sysctl_perf_event_sample_rate),
909 		.mode		= 0644,
910 		.proc_handler	= proc_dointvec,
911 	},
912 #endif
913 #ifdef CONFIG_KMEMCHECK
914 	{
915 		.procname	= "kmemcheck",
916 		.data		= &kmemcheck_enabled,
917 		.maxlen		= sizeof(int),
918 		.mode		= 0644,
919 		.proc_handler	= proc_dointvec,
920 	},
921 #endif
922 #ifdef CONFIG_BLOCK
923 	{
924 		.procname	= "blk_iopoll",
925 		.data		= &blk_iopoll_enabled,
926 		.maxlen		= sizeof(int),
927 		.mode		= 0644,
928 		.proc_handler	= proc_dointvec,
929 	},
930 #endif
931 /*
932  * NOTE: do not add new entries to this table unless you have read
933  * Documentation/sysctl/ctl_unnumbered.txt
934  */
935 	{ }
936 };
937 
938 static struct ctl_table vm_table[] = {
939 	{
940 		.procname	= "overcommit_memory",
941 		.data		= &sysctl_overcommit_memory,
942 		.maxlen		= sizeof(sysctl_overcommit_memory),
943 		.mode		= 0644,
944 		.proc_handler	= proc_dointvec,
945 	},
946 	{
947 		.procname	= "panic_on_oom",
948 		.data		= &sysctl_panic_on_oom,
949 		.maxlen		= sizeof(sysctl_panic_on_oom),
950 		.mode		= 0644,
951 		.proc_handler	= proc_dointvec,
952 	},
953 	{
954 		.procname	= "oom_kill_allocating_task",
955 		.data		= &sysctl_oom_kill_allocating_task,
956 		.maxlen		= sizeof(sysctl_oom_kill_allocating_task),
957 		.mode		= 0644,
958 		.proc_handler	= proc_dointvec,
959 	},
960 	{
961 		.procname	= "oom_dump_tasks",
962 		.data		= &sysctl_oom_dump_tasks,
963 		.maxlen		= sizeof(sysctl_oom_dump_tasks),
964 		.mode		= 0644,
965 		.proc_handler	= proc_dointvec,
966 	},
967 	{
968 		.procname	= "overcommit_ratio",
969 		.data		= &sysctl_overcommit_ratio,
970 		.maxlen		= sizeof(sysctl_overcommit_ratio),
971 		.mode		= 0644,
972 		.proc_handler	= proc_dointvec,
973 	},
974 	{
975 		.procname	= "page-cluster",
976 		.data		= &page_cluster,
977 		.maxlen		= sizeof(int),
978 		.mode		= 0644,
979 		.proc_handler	= proc_dointvec,
980 	},
981 	{
982 		.procname	= "dirty_background_ratio",
983 		.data		= &dirty_background_ratio,
984 		.maxlen		= sizeof(dirty_background_ratio),
985 		.mode		= 0644,
986 		.proc_handler	= dirty_background_ratio_handler,
987 		.extra1		= &zero,
988 		.extra2		= &one_hundred,
989 	},
990 	{
991 		.procname	= "dirty_background_bytes",
992 		.data		= &dirty_background_bytes,
993 		.maxlen		= sizeof(dirty_background_bytes),
994 		.mode		= 0644,
995 		.proc_handler	= dirty_background_bytes_handler,
996 		.extra1		= &one_ul,
997 	},
998 	{
999 		.procname	= "dirty_ratio",
1000 		.data		= &vm_dirty_ratio,
1001 		.maxlen		= sizeof(vm_dirty_ratio),
1002 		.mode		= 0644,
1003 		.proc_handler	= dirty_ratio_handler,
1004 		.extra1		= &zero,
1005 		.extra2		= &one_hundred,
1006 	},
1007 	{
1008 		.procname	= "dirty_bytes",
1009 		.data		= &vm_dirty_bytes,
1010 		.maxlen		= sizeof(vm_dirty_bytes),
1011 		.mode		= 0644,
1012 		.proc_handler	= dirty_bytes_handler,
1013 		.extra1		= &dirty_bytes_min,
1014 	},
1015 	{
1016 		.procname	= "dirty_writeback_centisecs",
1017 		.data		= &dirty_writeback_interval,
1018 		.maxlen		= sizeof(dirty_writeback_interval),
1019 		.mode		= 0644,
1020 		.proc_handler	= dirty_writeback_centisecs_handler,
1021 	},
1022 	{
1023 		.procname	= "dirty_expire_centisecs",
1024 		.data		= &dirty_expire_interval,
1025 		.maxlen		= sizeof(dirty_expire_interval),
1026 		.mode		= 0644,
1027 		.proc_handler	= proc_dointvec,
1028 	},
1029 	{
1030 		.procname	= "nr_pdflush_threads",
1031 		.data		= &nr_pdflush_threads,
1032 		.maxlen		= sizeof nr_pdflush_threads,
1033 		.mode		= 0444 /* read-only*/,
1034 		.proc_handler	= proc_dointvec,
1035 	},
1036 	{
1037 		.procname	= "swappiness",
1038 		.data		= &vm_swappiness,
1039 		.maxlen		= sizeof(vm_swappiness),
1040 		.mode		= 0644,
1041 		.proc_handler	= proc_dointvec_minmax,
1042 		.extra1		= &zero,
1043 		.extra2		= &one_hundred,
1044 	},
1045 #ifdef CONFIG_HUGETLB_PAGE
1046 	 {
1047 		.procname	= "nr_hugepages",
1048 		.data		= NULL,
1049 		.maxlen		= sizeof(unsigned long),
1050 		.mode		= 0644,
1051 		.proc_handler	= hugetlb_sysctl_handler,
1052 		.extra1		= (void *)&hugetlb_zero,
1053 		.extra2		= (void *)&hugetlb_infinity,
1054 	 },
1055 	 {
1056 		.procname	= "hugetlb_shm_group",
1057 		.data		= &sysctl_hugetlb_shm_group,
1058 		.maxlen		= sizeof(gid_t),
1059 		.mode		= 0644,
1060 		.proc_handler	= proc_dointvec,
1061 	 },
1062 	 {
1063 		.procname	= "hugepages_treat_as_movable",
1064 		.data		= &hugepages_treat_as_movable,
1065 		.maxlen		= sizeof(int),
1066 		.mode		= 0644,
1067 		.proc_handler	= hugetlb_treat_movable_handler,
1068 	},
1069 	{
1070 		.procname	= "nr_overcommit_hugepages",
1071 		.data		= NULL,
1072 		.maxlen		= sizeof(unsigned long),
1073 		.mode		= 0644,
1074 		.proc_handler	= hugetlb_overcommit_handler,
1075 		.extra1		= (void *)&hugetlb_zero,
1076 		.extra2		= (void *)&hugetlb_infinity,
1077 	},
1078 #endif
1079 	{
1080 		.procname	= "lowmem_reserve_ratio",
1081 		.data		= &sysctl_lowmem_reserve_ratio,
1082 		.maxlen		= sizeof(sysctl_lowmem_reserve_ratio),
1083 		.mode		= 0644,
1084 		.proc_handler	= lowmem_reserve_ratio_sysctl_handler,
1085 	},
1086 	{
1087 		.procname	= "drop_caches",
1088 		.data		= &sysctl_drop_caches,
1089 		.maxlen		= sizeof(int),
1090 		.mode		= 0644,
1091 		.proc_handler	= drop_caches_sysctl_handler,
1092 	},
1093 	{
1094 		.procname	= "min_free_kbytes",
1095 		.data		= &min_free_kbytes,
1096 		.maxlen		= sizeof(min_free_kbytes),
1097 		.mode		= 0644,
1098 		.proc_handler	= min_free_kbytes_sysctl_handler,
1099 		.extra1		= &zero,
1100 	},
1101 	{
1102 		.procname	= "percpu_pagelist_fraction",
1103 		.data		= &percpu_pagelist_fraction,
1104 		.maxlen		= sizeof(percpu_pagelist_fraction),
1105 		.mode		= 0644,
1106 		.proc_handler	= percpu_pagelist_fraction_sysctl_handler,
1107 		.extra1		= &min_percpu_pagelist_fract,
1108 	},
1109 #ifdef CONFIG_MMU
1110 	{
1111 		.procname	= "max_map_count",
1112 		.data		= &sysctl_max_map_count,
1113 		.maxlen		= sizeof(sysctl_max_map_count),
1114 		.mode		= 0644,
1115 		.proc_handler	= proc_dointvec
1116 	},
1117 #else
1118 	{
1119 		.procname	= "nr_trim_pages",
1120 		.data		= &sysctl_nr_trim_pages,
1121 		.maxlen		= sizeof(sysctl_nr_trim_pages),
1122 		.mode		= 0644,
1123 		.proc_handler	= proc_dointvec_minmax,
1124 		.extra1		= &zero,
1125 	},
1126 #endif
1127 	{
1128 		.procname	= "laptop_mode",
1129 		.data		= &laptop_mode,
1130 		.maxlen		= sizeof(laptop_mode),
1131 		.mode		= 0644,
1132 		.proc_handler	= proc_dointvec_jiffies,
1133 	},
1134 	{
1135 		.procname	= "block_dump",
1136 		.data		= &block_dump,
1137 		.maxlen		= sizeof(block_dump),
1138 		.mode		= 0644,
1139 		.proc_handler	= proc_dointvec,
1140 		.extra1		= &zero,
1141 	},
1142 	{
1143 		.procname	= "vfs_cache_pressure",
1144 		.data		= &sysctl_vfs_cache_pressure,
1145 		.maxlen		= sizeof(sysctl_vfs_cache_pressure),
1146 		.mode		= 0644,
1147 		.proc_handler	= proc_dointvec,
1148 		.extra1		= &zero,
1149 	},
1150 #ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
1151 	{
1152 		.procname	= "legacy_va_layout",
1153 		.data		= &sysctl_legacy_va_layout,
1154 		.maxlen		= sizeof(sysctl_legacy_va_layout),
1155 		.mode		= 0644,
1156 		.proc_handler	= proc_dointvec,
1157 		.extra1		= &zero,
1158 	},
1159 #endif
1160 #ifdef CONFIG_NUMA
1161 	{
1162 		.procname	= "zone_reclaim_mode",
1163 		.data		= &zone_reclaim_mode,
1164 		.maxlen		= sizeof(zone_reclaim_mode),
1165 		.mode		= 0644,
1166 		.proc_handler	= proc_dointvec,
1167 		.extra1		= &zero,
1168 	},
1169 	{
1170 		.procname	= "min_unmapped_ratio",
1171 		.data		= &sysctl_min_unmapped_ratio,
1172 		.maxlen		= sizeof(sysctl_min_unmapped_ratio),
1173 		.mode		= 0644,
1174 		.proc_handler	= sysctl_min_unmapped_ratio_sysctl_handler,
1175 		.extra1		= &zero,
1176 		.extra2		= &one_hundred,
1177 	},
1178 	{
1179 		.procname	= "min_slab_ratio",
1180 		.data		= &sysctl_min_slab_ratio,
1181 		.maxlen		= sizeof(sysctl_min_slab_ratio),
1182 		.mode		= 0644,
1183 		.proc_handler	= sysctl_min_slab_ratio_sysctl_handler,
1184 		.extra1		= &zero,
1185 		.extra2		= &one_hundred,
1186 	},
1187 #endif
1188 #ifdef CONFIG_SMP
1189 	{
1190 		.procname	= "stat_interval",
1191 		.data		= &sysctl_stat_interval,
1192 		.maxlen		= sizeof(sysctl_stat_interval),
1193 		.mode		= 0644,
1194 		.proc_handler	= proc_dointvec_jiffies,
1195 	},
1196 #endif
1197 	{
1198 		.procname	= "mmap_min_addr",
1199 		.data		= &dac_mmap_min_addr,
1200 		.maxlen		= sizeof(unsigned long),
1201 		.mode		= 0644,
1202 		.proc_handler	= mmap_min_addr_handler,
1203 	},
1204 #ifdef CONFIG_NUMA
1205 	{
1206 		.procname	= "numa_zonelist_order",
1207 		.data		= &numa_zonelist_order,
1208 		.maxlen		= NUMA_ZONELIST_ORDER_LEN,
1209 		.mode		= 0644,
1210 		.proc_handler	= numa_zonelist_order_handler,
1211 	},
1212 #endif
1213 #if (defined(CONFIG_X86_32) && !defined(CONFIG_UML))|| \
1214    (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL))
1215 	{
1216 		.procname	= "vdso_enabled",
1217 		.data		= &vdso_enabled,
1218 		.maxlen		= sizeof(vdso_enabled),
1219 		.mode		= 0644,
1220 		.proc_handler	= proc_dointvec,
1221 		.extra1		= &zero,
1222 	},
1223 #endif
1224 #ifdef CONFIG_HIGHMEM
1225 	{
1226 		.procname	= "highmem_is_dirtyable",
1227 		.data		= &vm_highmem_is_dirtyable,
1228 		.maxlen		= sizeof(vm_highmem_is_dirtyable),
1229 		.mode		= 0644,
1230 		.proc_handler	= proc_dointvec_minmax,
1231 		.extra1		= &zero,
1232 		.extra2		= &one,
1233 	},
1234 #endif
1235 	{
1236 		.procname	= "scan_unevictable_pages",
1237 		.data		= &scan_unevictable_pages,
1238 		.maxlen		= sizeof(scan_unevictable_pages),
1239 		.mode		= 0644,
1240 		.proc_handler	= scan_unevictable_handler,
1241 	},
1242 #ifdef CONFIG_MEMORY_FAILURE
1243 	{
1244 		.procname	= "memory_failure_early_kill",
1245 		.data		= &sysctl_memory_failure_early_kill,
1246 		.maxlen		= sizeof(sysctl_memory_failure_early_kill),
1247 		.mode		= 0644,
1248 		.proc_handler	= proc_dointvec_minmax,
1249 		.extra1		= &zero,
1250 		.extra2		= &one,
1251 	},
1252 	{
1253 		.procname	= "memory_failure_recovery",
1254 		.data		= &sysctl_memory_failure_recovery,
1255 		.maxlen		= sizeof(sysctl_memory_failure_recovery),
1256 		.mode		= 0644,
1257 		.proc_handler	= proc_dointvec_minmax,
1258 		.extra1		= &zero,
1259 		.extra2		= &one,
1260 	},
1261 #endif
1262 
1263 /*
1264  * NOTE: do not add new entries to this table unless you have read
1265  * Documentation/sysctl/ctl_unnumbered.txt
1266  */
1267 	{ }
1268 };
1269 
1270 #if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE)
1271 static struct ctl_table binfmt_misc_table[] = {
1272 	{ }
1273 };
1274 #endif
1275 
1276 static struct ctl_table fs_table[] = {
1277 	{
1278 		.procname	= "inode-nr",
1279 		.data		= &inodes_stat,
1280 		.maxlen		= 2*sizeof(int),
1281 		.mode		= 0444,
1282 		.proc_handler	= proc_dointvec,
1283 	},
1284 	{
1285 		.procname	= "inode-state",
1286 		.data		= &inodes_stat,
1287 		.maxlen		= 7*sizeof(int),
1288 		.mode		= 0444,
1289 		.proc_handler	= proc_dointvec,
1290 	},
1291 	{
1292 		.procname	= "file-nr",
1293 		.data		= &files_stat,
1294 		.maxlen		= 3*sizeof(int),
1295 		.mode		= 0444,
1296 		.proc_handler	= proc_nr_files,
1297 	},
1298 	{
1299 		.procname	= "file-max",
1300 		.data		= &files_stat.max_files,
1301 		.maxlen		= sizeof(int),
1302 		.mode		= 0644,
1303 		.proc_handler	= proc_dointvec,
1304 	},
1305 	{
1306 		.procname	= "nr_open",
1307 		.data		= &sysctl_nr_open,
1308 		.maxlen		= sizeof(int),
1309 		.mode		= 0644,
1310 		.proc_handler	= proc_dointvec_minmax,
1311 		.extra1		= &sysctl_nr_open_min,
1312 		.extra2		= &sysctl_nr_open_max,
1313 	},
1314 	{
1315 		.procname	= "dentry-state",
1316 		.data		= &dentry_stat,
1317 		.maxlen		= 6*sizeof(int),
1318 		.mode		= 0444,
1319 		.proc_handler	= proc_dointvec,
1320 	},
1321 	{
1322 		.procname	= "overflowuid",
1323 		.data		= &fs_overflowuid,
1324 		.maxlen		= sizeof(int),
1325 		.mode		= 0644,
1326 		.proc_handler	= proc_dointvec_minmax,
1327 		.extra1		= &minolduid,
1328 		.extra2		= &maxolduid,
1329 	},
1330 	{
1331 		.procname	= "overflowgid",
1332 		.data		= &fs_overflowgid,
1333 		.maxlen		= sizeof(int),
1334 		.mode		= 0644,
1335 		.proc_handler	= proc_dointvec_minmax,
1336 		.extra1		= &minolduid,
1337 		.extra2		= &maxolduid,
1338 	},
1339 #ifdef CONFIG_FILE_LOCKING
1340 	{
1341 		.procname	= "leases-enable",
1342 		.data		= &leases_enable,
1343 		.maxlen		= sizeof(int),
1344 		.mode		= 0644,
1345 		.proc_handler	= proc_dointvec,
1346 	},
1347 #endif
1348 #ifdef CONFIG_DNOTIFY
1349 	{
1350 		.procname	= "dir-notify-enable",
1351 		.data		= &dir_notify_enable,
1352 		.maxlen		= sizeof(int),
1353 		.mode		= 0644,
1354 		.proc_handler	= proc_dointvec,
1355 	},
1356 #endif
1357 #ifdef CONFIG_MMU
1358 #ifdef CONFIG_FILE_LOCKING
1359 	{
1360 		.procname	= "lease-break-time",
1361 		.data		= &lease_break_time,
1362 		.maxlen		= sizeof(int),
1363 		.mode		= 0644,
1364 		.proc_handler	= proc_dointvec,
1365 	},
1366 #endif
1367 #ifdef CONFIG_AIO
1368 	{
1369 		.procname	= "aio-nr",
1370 		.data		= &aio_nr,
1371 		.maxlen		= sizeof(aio_nr),
1372 		.mode		= 0444,
1373 		.proc_handler	= proc_doulongvec_minmax,
1374 	},
1375 	{
1376 		.procname	= "aio-max-nr",
1377 		.data		= &aio_max_nr,
1378 		.maxlen		= sizeof(aio_max_nr),
1379 		.mode		= 0644,
1380 		.proc_handler	= proc_doulongvec_minmax,
1381 	},
1382 #endif /* CONFIG_AIO */
1383 #ifdef CONFIG_INOTIFY_USER
1384 	{
1385 		.procname	= "inotify",
1386 		.mode		= 0555,
1387 		.child		= inotify_table,
1388 	},
1389 #endif
1390 #ifdef CONFIG_EPOLL
1391 	{
1392 		.procname	= "epoll",
1393 		.mode		= 0555,
1394 		.child		= epoll_table,
1395 	},
1396 #endif
1397 #endif
1398 	{
1399 		.procname	= "suid_dumpable",
1400 		.data		= &suid_dumpable,
1401 		.maxlen		= sizeof(int),
1402 		.mode		= 0644,
1403 		.proc_handler	= proc_dointvec_minmax,
1404 		.extra1		= &zero,
1405 		.extra2		= &two,
1406 	},
1407 #if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE)
1408 	{
1409 		.procname	= "binfmt_misc",
1410 		.mode		= 0555,
1411 		.child		= binfmt_misc_table,
1412 	},
1413 #endif
1414 /*
1415  * NOTE: do not add new entries to this table unless you have read
1416  * Documentation/sysctl/ctl_unnumbered.txt
1417  */
1418 	{ }
1419 };
1420 
1421 static struct ctl_table debug_table[] = {
1422 #if defined(CONFIG_X86) || defined(CONFIG_PPC)
1423 	{
1424 		.procname	= "exception-trace",
1425 		.data		= &show_unhandled_signals,
1426 		.maxlen		= sizeof(int),
1427 		.mode		= 0644,
1428 		.proc_handler	= proc_dointvec
1429 	},
1430 #endif
1431 	{ }
1432 };
1433 
1434 static struct ctl_table dev_table[] = {
1435 	{ }
1436 };
1437 
1438 static DEFINE_SPINLOCK(sysctl_lock);
1439 
1440 /* called under sysctl_lock */
1441 static int use_table(struct ctl_table_header *p)
1442 {
1443 	if (unlikely(p->unregistering))
1444 		return 0;
1445 	p->used++;
1446 	return 1;
1447 }
1448 
1449 /* called under sysctl_lock */
1450 static void unuse_table(struct ctl_table_header *p)
1451 {
1452 	if (!--p->used)
1453 		if (unlikely(p->unregistering))
1454 			complete(p->unregistering);
1455 }
1456 
1457 /* called under sysctl_lock, will reacquire if has to wait */
1458 static void start_unregistering(struct ctl_table_header *p)
1459 {
1460 	/*
1461 	 * if p->used is 0, nobody will ever touch that entry again;
1462 	 * we'll eliminate all paths to it before dropping sysctl_lock
1463 	 */
1464 	if (unlikely(p->used)) {
1465 		struct completion wait;
1466 		init_completion(&wait);
1467 		p->unregistering = &wait;
1468 		spin_unlock(&sysctl_lock);
1469 		wait_for_completion(&wait);
1470 		spin_lock(&sysctl_lock);
1471 	} else {
1472 		/* anything non-NULL; we'll never dereference it */
1473 		p->unregistering = ERR_PTR(-EINVAL);
1474 	}
1475 	/*
1476 	 * do not remove from the list until nobody holds it; walking the
1477 	 * list in do_sysctl() relies on that.
1478 	 */
1479 	list_del_init(&p->ctl_entry);
1480 }
1481 
1482 void sysctl_head_get(struct ctl_table_header *head)
1483 {
1484 	spin_lock(&sysctl_lock);
1485 	head->count++;
1486 	spin_unlock(&sysctl_lock);
1487 }
1488 
1489 void sysctl_head_put(struct ctl_table_header *head)
1490 {
1491 	spin_lock(&sysctl_lock);
1492 	if (!--head->count)
1493 		kfree(head);
1494 	spin_unlock(&sysctl_lock);
1495 }
1496 
1497 struct ctl_table_header *sysctl_head_grab(struct ctl_table_header *head)
1498 {
1499 	if (!head)
1500 		BUG();
1501 	spin_lock(&sysctl_lock);
1502 	if (!use_table(head))
1503 		head = ERR_PTR(-ENOENT);
1504 	spin_unlock(&sysctl_lock);
1505 	return head;
1506 }
1507 
1508 void sysctl_head_finish(struct ctl_table_header *head)
1509 {
1510 	if (!head)
1511 		return;
1512 	spin_lock(&sysctl_lock);
1513 	unuse_table(head);
1514 	spin_unlock(&sysctl_lock);
1515 }
1516 
1517 static struct ctl_table_set *
1518 lookup_header_set(struct ctl_table_root *root, struct nsproxy *namespaces)
1519 {
1520 	struct ctl_table_set *set = &root->default_set;
1521 	if (root->lookup)
1522 		set = root->lookup(root, namespaces);
1523 	return set;
1524 }
1525 
1526 static struct list_head *
1527 lookup_header_list(struct ctl_table_root *root, struct nsproxy *namespaces)
1528 {
1529 	struct ctl_table_set *set = lookup_header_set(root, namespaces);
1530 	return &set->list;
1531 }
1532 
1533 struct ctl_table_header *__sysctl_head_next(struct nsproxy *namespaces,
1534 					    struct ctl_table_header *prev)
1535 {
1536 	struct ctl_table_root *root;
1537 	struct list_head *header_list;
1538 	struct ctl_table_header *head;
1539 	struct list_head *tmp;
1540 
1541 	spin_lock(&sysctl_lock);
1542 	if (prev) {
1543 		head = prev;
1544 		tmp = &prev->ctl_entry;
1545 		unuse_table(prev);
1546 		goto next;
1547 	}
1548 	tmp = &root_table_header.ctl_entry;
1549 	for (;;) {
1550 		head = list_entry(tmp, struct ctl_table_header, ctl_entry);
1551 
1552 		if (!use_table(head))
1553 			goto next;
1554 		spin_unlock(&sysctl_lock);
1555 		return head;
1556 	next:
1557 		root = head->root;
1558 		tmp = tmp->next;
1559 		header_list = lookup_header_list(root, namespaces);
1560 		if (tmp != header_list)
1561 			continue;
1562 
1563 		do {
1564 			root = list_entry(root->root_list.next,
1565 					struct ctl_table_root, root_list);
1566 			if (root == &sysctl_table_root)
1567 				goto out;
1568 			header_list = lookup_header_list(root, namespaces);
1569 		} while (list_empty(header_list));
1570 		tmp = header_list->next;
1571 	}
1572 out:
1573 	spin_unlock(&sysctl_lock);
1574 	return NULL;
1575 }
1576 
1577 struct ctl_table_header *sysctl_head_next(struct ctl_table_header *prev)
1578 {
1579 	return __sysctl_head_next(current->nsproxy, prev);
1580 }
1581 
1582 void register_sysctl_root(struct ctl_table_root *root)
1583 {
1584 	spin_lock(&sysctl_lock);
1585 	list_add_tail(&root->root_list, &sysctl_table_root.root_list);
1586 	spin_unlock(&sysctl_lock);
1587 }
1588 
1589 /*
1590  * sysctl_perm does NOT grant the superuser all rights automatically, because
1591  * some sysctl variables are readonly even to root.
1592  */
1593 
1594 static int test_perm(int mode, int op)
1595 {
1596 	if (!current_euid())
1597 		mode >>= 6;
1598 	else if (in_egroup_p(0))
1599 		mode >>= 3;
1600 	if ((op & ~mode & (MAY_READ|MAY_WRITE|MAY_EXEC)) == 0)
1601 		return 0;
1602 	return -EACCES;
1603 }
1604 
1605 int sysctl_perm(struct ctl_table_root *root, struct ctl_table *table, int op)
1606 {
1607 	int error;
1608 	int mode;
1609 
1610 	error = security_sysctl(table, op & (MAY_READ | MAY_WRITE | MAY_EXEC));
1611 	if (error)
1612 		return error;
1613 
1614 	if (root->permissions)
1615 		mode = root->permissions(root, current->nsproxy, table);
1616 	else
1617 		mode = table->mode;
1618 
1619 	return test_perm(mode, op);
1620 }
1621 
1622 static void sysctl_set_parent(struct ctl_table *parent, struct ctl_table *table)
1623 {
1624 	for (; table->procname; table++) {
1625 		table->parent = parent;
1626 		if (table->child)
1627 			sysctl_set_parent(table, table->child);
1628 	}
1629 }
1630 
1631 static __init int sysctl_init(void)
1632 {
1633 	sysctl_set_parent(NULL, root_table);
1634 #ifdef CONFIG_SYSCTL_SYSCALL_CHECK
1635 	{
1636 		int err;
1637 		err = sysctl_check_table(current->nsproxy, root_table);
1638 	}
1639 #endif
1640 	return 0;
1641 }
1642 
1643 core_initcall(sysctl_init);
1644 
1645 static struct ctl_table *is_branch_in(struct ctl_table *branch,
1646 				      struct ctl_table *table)
1647 {
1648 	struct ctl_table *p;
1649 	const char *s = branch->procname;
1650 
1651 	/* branch should have named subdirectory as its first element */
1652 	if (!s || !branch->child)
1653 		return NULL;
1654 
1655 	/* ... and nothing else */
1656 	if (branch[1].procname)
1657 		return NULL;
1658 
1659 	/* table should contain subdirectory with the same name */
1660 	for (p = table; p->procname; p++) {
1661 		if (!p->child)
1662 			continue;
1663 		if (p->procname && strcmp(p->procname, s) == 0)
1664 			return p;
1665 	}
1666 	return NULL;
1667 }
1668 
1669 /* see if attaching q to p would be an improvement */
1670 static void try_attach(struct ctl_table_header *p, struct ctl_table_header *q)
1671 {
1672 	struct ctl_table *to = p->ctl_table, *by = q->ctl_table;
1673 	struct ctl_table *next;
1674 	int is_better = 0;
1675 	int not_in_parent = !p->attached_by;
1676 
1677 	while ((next = is_branch_in(by, to)) != NULL) {
1678 		if (by == q->attached_by)
1679 			is_better = 1;
1680 		if (to == p->attached_by)
1681 			not_in_parent = 1;
1682 		by = by->child;
1683 		to = next->child;
1684 	}
1685 
1686 	if (is_better && not_in_parent) {
1687 		q->attached_by = by;
1688 		q->attached_to = to;
1689 		q->parent = p;
1690 	}
1691 }
1692 
1693 /**
1694  * __register_sysctl_paths - register a sysctl hierarchy
1695  * @root: List of sysctl headers to register on
1696  * @namespaces: Data to compute which lists of sysctl entries are visible
1697  * @path: The path to the directory the sysctl table is in.
1698  * @table: the top-level table structure
1699  *
1700  * Register a sysctl table hierarchy. @table should be a filled in ctl_table
1701  * array. A completely 0 filled entry terminates the table.
1702  *
1703  * The members of the &struct ctl_table structure are used as follows:
1704  *
1705  * procname - the name of the sysctl file under /proc/sys. Set to %NULL to not
1706  *            enter a sysctl file
1707  *
1708  * data - a pointer to data for use by proc_handler
1709  *
1710  * maxlen - the maximum size in bytes of the data
1711  *
1712  * mode - the file permissions for the /proc/sys file, and for sysctl(2)
1713  *
1714  * child - a pointer to the child sysctl table if this entry is a directory, or
1715  *         %NULL.
1716  *
1717  * proc_handler - the text handler routine (described below)
1718  *
1719  * de - for internal use by the sysctl routines
1720  *
1721  * extra1, extra2 - extra pointers usable by the proc handler routines
1722  *
1723  * Leaf nodes in the sysctl tree will be represented by a single file
1724  * under /proc; non-leaf nodes will be represented by directories.
1725  *
1726  * sysctl(2) can automatically manage read and write requests through
1727  * the sysctl table.  The data and maxlen fields of the ctl_table
1728  * struct enable minimal validation of the values being written to be
1729  * performed, and the mode field allows minimal authentication.
1730  *
1731  * There must be a proc_handler routine for any terminal nodes
1732  * mirrored under /proc/sys (non-terminals are handled by a built-in
1733  * directory handler).  Several default handlers are available to
1734  * cover common cases -
1735  *
1736  * proc_dostring(), proc_dointvec(), proc_dointvec_jiffies(),
1737  * proc_dointvec_userhz_jiffies(), proc_dointvec_minmax(),
1738  * proc_doulongvec_ms_jiffies_minmax(), proc_doulongvec_minmax()
1739  *
1740  * It is the handler's job to read the input buffer from user memory
1741  * and process it. The handler should return 0 on success.
1742  *
1743  * This routine returns %NULL on a failure to register, and a pointer
1744  * to the table header on success.
1745  */
1746 struct ctl_table_header *__register_sysctl_paths(
1747 	struct ctl_table_root *root,
1748 	struct nsproxy *namespaces,
1749 	const struct ctl_path *path, struct ctl_table *table)
1750 {
1751 	struct ctl_table_header *header;
1752 	struct ctl_table *new, **prevp;
1753 	unsigned int n, npath;
1754 	struct ctl_table_set *set;
1755 
1756 	/* Count the path components */
1757 	for (npath = 0; path[npath].procname; ++npath)
1758 		;
1759 
1760 	/*
1761 	 * For each path component, allocate a 2-element ctl_table array.
1762 	 * The first array element will be filled with the sysctl entry
1763 	 * for this, the second will be the sentinel (procname == 0).
1764 	 *
1765 	 * We allocate everything in one go so that we don't have to
1766 	 * worry about freeing additional memory in unregister_sysctl_table.
1767 	 */
1768 	header = kzalloc(sizeof(struct ctl_table_header) +
1769 			 (2 * npath * sizeof(struct ctl_table)), GFP_KERNEL);
1770 	if (!header)
1771 		return NULL;
1772 
1773 	new = (struct ctl_table *) (header + 1);
1774 
1775 	/* Now connect the dots */
1776 	prevp = &header->ctl_table;
1777 	for (n = 0; n < npath; ++n, ++path) {
1778 		/* Copy the procname */
1779 		new->procname = path->procname;
1780 		new->mode     = 0555;
1781 
1782 		*prevp = new;
1783 		prevp = &new->child;
1784 
1785 		new += 2;
1786 	}
1787 	*prevp = table;
1788 	header->ctl_table_arg = table;
1789 
1790 	INIT_LIST_HEAD(&header->ctl_entry);
1791 	header->used = 0;
1792 	header->unregistering = NULL;
1793 	header->root = root;
1794 	sysctl_set_parent(NULL, header->ctl_table);
1795 	header->count = 1;
1796 #ifdef CONFIG_SYSCTL_SYSCALL_CHECK
1797 	if (sysctl_check_table(namespaces, header->ctl_table)) {
1798 		kfree(header);
1799 		return NULL;
1800 	}
1801 #endif
1802 	spin_lock(&sysctl_lock);
1803 	header->set = lookup_header_set(root, namespaces);
1804 	header->attached_by = header->ctl_table;
1805 	header->attached_to = root_table;
1806 	header->parent = &root_table_header;
1807 	for (set = header->set; set; set = set->parent) {
1808 		struct ctl_table_header *p;
1809 		list_for_each_entry(p, &set->list, ctl_entry) {
1810 			if (p->unregistering)
1811 				continue;
1812 			try_attach(p, header);
1813 		}
1814 	}
1815 	header->parent->count++;
1816 	list_add_tail(&header->ctl_entry, &header->set->list);
1817 	spin_unlock(&sysctl_lock);
1818 
1819 	return header;
1820 }
1821 
1822 /**
1823  * register_sysctl_table_path - register a sysctl table hierarchy
1824  * @path: The path to the directory the sysctl table is in.
1825  * @table: the top-level table structure
1826  *
1827  * Register a sysctl table hierarchy. @table should be a filled in ctl_table
1828  * array. A completely 0 filled entry terminates the table.
1829  *
1830  * See __register_sysctl_paths for more details.
1831  */
1832 struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
1833 						struct ctl_table *table)
1834 {
1835 	return __register_sysctl_paths(&sysctl_table_root, current->nsproxy,
1836 					path, table);
1837 }
1838 
1839 /**
1840  * register_sysctl_table - register a sysctl table hierarchy
1841  * @table: the top-level table structure
1842  *
1843  * Register a sysctl table hierarchy. @table should be a filled in ctl_table
1844  * array. A completely 0 filled entry terminates the table.
1845  *
1846  * See register_sysctl_paths for more details.
1847  */
1848 struct ctl_table_header *register_sysctl_table(struct ctl_table *table)
1849 {
1850 	static const struct ctl_path null_path[] = { {} };
1851 
1852 	return register_sysctl_paths(null_path, table);
1853 }
1854 
1855 /**
1856  * unregister_sysctl_table - unregister a sysctl table hierarchy
1857  * @header: the header returned from register_sysctl_table
1858  *
1859  * Unregisters the sysctl table and all children. proc entries may not
1860  * actually be removed until they are no longer used by anyone.
1861  */
1862 void unregister_sysctl_table(struct ctl_table_header * header)
1863 {
1864 	might_sleep();
1865 
1866 	if (header == NULL)
1867 		return;
1868 
1869 	spin_lock(&sysctl_lock);
1870 	start_unregistering(header);
1871 	if (!--header->parent->count) {
1872 		WARN_ON(1);
1873 		kfree(header->parent);
1874 	}
1875 	if (!--header->count)
1876 		kfree(header);
1877 	spin_unlock(&sysctl_lock);
1878 }
1879 
1880 int sysctl_is_seen(struct ctl_table_header *p)
1881 {
1882 	struct ctl_table_set *set = p->set;
1883 	int res;
1884 	spin_lock(&sysctl_lock);
1885 	if (p->unregistering)
1886 		res = 0;
1887 	else if (!set->is_seen)
1888 		res = 1;
1889 	else
1890 		res = set->is_seen(set);
1891 	spin_unlock(&sysctl_lock);
1892 	return res;
1893 }
1894 
1895 void setup_sysctl_set(struct ctl_table_set *p,
1896 	struct ctl_table_set *parent,
1897 	int (*is_seen)(struct ctl_table_set *))
1898 {
1899 	INIT_LIST_HEAD(&p->list);
1900 	p->parent = parent ? parent : &sysctl_table_root.default_set;
1901 	p->is_seen = is_seen;
1902 }
1903 
1904 #else /* !CONFIG_SYSCTL */
1905 struct ctl_table_header *register_sysctl_table(struct ctl_table * table)
1906 {
1907 	return NULL;
1908 }
1909 
1910 struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
1911 						    struct ctl_table *table)
1912 {
1913 	return NULL;
1914 }
1915 
1916 void unregister_sysctl_table(struct ctl_table_header * table)
1917 {
1918 }
1919 
1920 void setup_sysctl_set(struct ctl_table_set *p,
1921 	struct ctl_table_set *parent,
1922 	int (*is_seen)(struct ctl_table_set *))
1923 {
1924 }
1925 
1926 void sysctl_head_put(struct ctl_table_header *head)
1927 {
1928 }
1929 
1930 #endif /* CONFIG_SYSCTL */
1931 
1932 /*
1933  * /proc/sys support
1934  */
1935 
1936 #ifdef CONFIG_PROC_SYSCTL
1937 
1938 static int _proc_do_string(void* data, int maxlen, int write,
1939 			   void __user *buffer,
1940 			   size_t *lenp, loff_t *ppos)
1941 {
1942 	size_t len;
1943 	char __user *p;
1944 	char c;
1945 
1946 	if (!data || !maxlen || !*lenp) {
1947 		*lenp = 0;
1948 		return 0;
1949 	}
1950 
1951 	if (write) {
1952 		len = 0;
1953 		p = buffer;
1954 		while (len < *lenp) {
1955 			if (get_user(c, p++))
1956 				return -EFAULT;
1957 			if (c == 0 || c == '\n')
1958 				break;
1959 			len++;
1960 		}
1961 		if (len >= maxlen)
1962 			len = maxlen-1;
1963 		if(copy_from_user(data, buffer, len))
1964 			return -EFAULT;
1965 		((char *) data)[len] = 0;
1966 		*ppos += *lenp;
1967 	} else {
1968 		len = strlen(data);
1969 		if (len > maxlen)
1970 			len = maxlen;
1971 
1972 		if (*ppos > len) {
1973 			*lenp = 0;
1974 			return 0;
1975 		}
1976 
1977 		data += *ppos;
1978 		len  -= *ppos;
1979 
1980 		if (len > *lenp)
1981 			len = *lenp;
1982 		if (len)
1983 			if(copy_to_user(buffer, data, len))
1984 				return -EFAULT;
1985 		if (len < *lenp) {
1986 			if(put_user('\n', ((char __user *) buffer) + len))
1987 				return -EFAULT;
1988 			len++;
1989 		}
1990 		*lenp = len;
1991 		*ppos += len;
1992 	}
1993 	return 0;
1994 }
1995 
1996 /**
1997  * proc_dostring - read a string sysctl
1998  * @table: the sysctl table
1999  * @write: %TRUE if this is a write to the sysctl file
2000  * @buffer: the user buffer
2001  * @lenp: the size of the user buffer
2002  * @ppos: file position
2003  *
2004  * Reads/writes a string from/to the user buffer. If the kernel
2005  * buffer provided is not large enough to hold the string, the
2006  * string is truncated. The copied string is %NULL-terminated.
2007  * If the string is being read by the user process, it is copied
2008  * and a newline '\n' is added. It is truncated if the buffer is
2009  * not large enough.
2010  *
2011  * Returns 0 on success.
2012  */
2013 int proc_dostring(struct ctl_table *table, int write,
2014 		  void __user *buffer, size_t *lenp, loff_t *ppos)
2015 {
2016 	return _proc_do_string(table->data, table->maxlen, write,
2017 			       buffer, lenp, ppos);
2018 }
2019 
2020 
2021 static int do_proc_dointvec_conv(int *negp, unsigned long *lvalp,
2022 				 int *valp,
2023 				 int write, void *data)
2024 {
2025 	if (write) {
2026 		*valp = *negp ? -*lvalp : *lvalp;
2027 	} else {
2028 		int val = *valp;
2029 		if (val < 0) {
2030 			*negp = -1;
2031 			*lvalp = (unsigned long)-val;
2032 		} else {
2033 			*negp = 0;
2034 			*lvalp = (unsigned long)val;
2035 		}
2036 	}
2037 	return 0;
2038 }
2039 
2040 static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
2041 		  int write, void __user *buffer,
2042 		  size_t *lenp, loff_t *ppos,
2043 		  int (*conv)(int *negp, unsigned long *lvalp, int *valp,
2044 			      int write, void *data),
2045 		  void *data)
2046 {
2047 #define TMPBUFLEN 21
2048 	int *i, vleft, first = 1, neg;
2049 	unsigned long lval;
2050 	size_t left, len;
2051 
2052 	char buf[TMPBUFLEN], *p;
2053 	char __user *s = buffer;
2054 
2055 	if (!tbl_data || !table->maxlen || !*lenp ||
2056 	    (*ppos && !write)) {
2057 		*lenp = 0;
2058 		return 0;
2059 	}
2060 
2061 	i = (int *) tbl_data;
2062 	vleft = table->maxlen / sizeof(*i);
2063 	left = *lenp;
2064 
2065 	if (!conv)
2066 		conv = do_proc_dointvec_conv;
2067 
2068 	for (; left && vleft--; i++, first=0) {
2069 		if (write) {
2070 			while (left) {
2071 				char c;
2072 				if (get_user(c, s))
2073 					return -EFAULT;
2074 				if (!isspace(c))
2075 					break;
2076 				left--;
2077 				s++;
2078 			}
2079 			if (!left)
2080 				break;
2081 			neg = 0;
2082 			len = left;
2083 			if (len > sizeof(buf) - 1)
2084 				len = sizeof(buf) - 1;
2085 			if (copy_from_user(buf, s, len))
2086 				return -EFAULT;
2087 			buf[len] = 0;
2088 			p = buf;
2089 			if (*p == '-' && left > 1) {
2090 				neg = 1;
2091 				p++;
2092 			}
2093 			if (*p < '0' || *p > '9')
2094 				break;
2095 
2096 			lval = simple_strtoul(p, &p, 0);
2097 
2098 			len = p-buf;
2099 			if ((len < left) && *p && !isspace(*p))
2100 				break;
2101 			s += len;
2102 			left -= len;
2103 
2104 			if (conv(&neg, &lval, i, 1, data))
2105 				break;
2106 		} else {
2107 			p = buf;
2108 			if (!first)
2109 				*p++ = '\t';
2110 
2111 			if (conv(&neg, &lval, i, 0, data))
2112 				break;
2113 
2114 			sprintf(p, "%s%lu", neg ? "-" : "", lval);
2115 			len = strlen(buf);
2116 			if (len > left)
2117 				len = left;
2118 			if(copy_to_user(s, buf, len))
2119 				return -EFAULT;
2120 			left -= len;
2121 			s += len;
2122 		}
2123 	}
2124 
2125 	if (!write && !first && left) {
2126 		if(put_user('\n', s))
2127 			return -EFAULT;
2128 		left--, s++;
2129 	}
2130 	if (write) {
2131 		while (left) {
2132 			char c;
2133 			if (get_user(c, s++))
2134 				return -EFAULT;
2135 			if (!isspace(c))
2136 				break;
2137 			left--;
2138 		}
2139 	}
2140 	if (write && first)
2141 		return -EINVAL;
2142 	*lenp -= left;
2143 	*ppos += *lenp;
2144 	return 0;
2145 #undef TMPBUFLEN
2146 }
2147 
2148 static int do_proc_dointvec(struct ctl_table *table, int write,
2149 		  void __user *buffer, size_t *lenp, loff_t *ppos,
2150 		  int (*conv)(int *negp, unsigned long *lvalp, int *valp,
2151 			      int write, void *data),
2152 		  void *data)
2153 {
2154 	return __do_proc_dointvec(table->data, table, write,
2155 			buffer, lenp, ppos, conv, data);
2156 }
2157 
2158 /**
2159  * proc_dointvec - read a vector of integers
2160  * @table: the sysctl table
2161  * @write: %TRUE if this is a write to the sysctl file
2162  * @buffer: the user buffer
2163  * @lenp: the size of the user buffer
2164  * @ppos: file position
2165  *
2166  * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
2167  * values from/to the user buffer, treated as an ASCII string.
2168  *
2169  * Returns 0 on success.
2170  */
2171 int proc_dointvec(struct ctl_table *table, int write,
2172 		     void __user *buffer, size_t *lenp, loff_t *ppos)
2173 {
2174     return do_proc_dointvec(table,write,buffer,lenp,ppos,
2175 		    	    NULL,NULL);
2176 }
2177 
2178 /*
2179  * Taint values can only be increased
2180  * This means we can safely use a temporary.
2181  */
2182 static int proc_taint(struct ctl_table *table, int write,
2183 			       void __user *buffer, size_t *lenp, loff_t *ppos)
2184 {
2185 	struct ctl_table t;
2186 	unsigned long tmptaint = get_taint();
2187 	int err;
2188 
2189 	if (write && !capable(CAP_SYS_ADMIN))
2190 		return -EPERM;
2191 
2192 	t = *table;
2193 	t.data = &tmptaint;
2194 	err = proc_doulongvec_minmax(&t, write, buffer, lenp, ppos);
2195 	if (err < 0)
2196 		return err;
2197 
2198 	if (write) {
2199 		/*
2200 		 * Poor man's atomic or. Not worth adding a primitive
2201 		 * to everyone's atomic.h for this
2202 		 */
2203 		int i;
2204 		for (i = 0; i < BITS_PER_LONG && tmptaint >> i; i++) {
2205 			if ((tmptaint >> i) & 1)
2206 				add_taint(i);
2207 		}
2208 	}
2209 
2210 	return err;
2211 }
2212 
2213 struct do_proc_dointvec_minmax_conv_param {
2214 	int *min;
2215 	int *max;
2216 };
2217 
2218 static int do_proc_dointvec_minmax_conv(int *negp, unsigned long *lvalp,
2219 					int *valp,
2220 					int write, void *data)
2221 {
2222 	struct do_proc_dointvec_minmax_conv_param *param = data;
2223 	if (write) {
2224 		int val = *negp ? -*lvalp : *lvalp;
2225 		if ((param->min && *param->min > val) ||
2226 		    (param->max && *param->max < val))
2227 			return -EINVAL;
2228 		*valp = val;
2229 	} else {
2230 		int val = *valp;
2231 		if (val < 0) {
2232 			*negp = -1;
2233 			*lvalp = (unsigned long)-val;
2234 		} else {
2235 			*negp = 0;
2236 			*lvalp = (unsigned long)val;
2237 		}
2238 	}
2239 	return 0;
2240 }
2241 
2242 /**
2243  * proc_dointvec_minmax - read a vector of integers with min/max values
2244  * @table: the sysctl table
2245  * @write: %TRUE if this is a write to the sysctl file
2246  * @buffer: the user buffer
2247  * @lenp: the size of the user buffer
2248  * @ppos: file position
2249  *
2250  * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
2251  * values from/to the user buffer, treated as an ASCII string.
2252  *
2253  * This routine will ensure the values are within the range specified by
2254  * table->extra1 (min) and table->extra2 (max).
2255  *
2256  * Returns 0 on success.
2257  */
2258 int proc_dointvec_minmax(struct ctl_table *table, int write,
2259 		  void __user *buffer, size_t *lenp, loff_t *ppos)
2260 {
2261 	struct do_proc_dointvec_minmax_conv_param param = {
2262 		.min = (int *) table->extra1,
2263 		.max = (int *) table->extra2,
2264 	};
2265 	return do_proc_dointvec(table, write, buffer, lenp, ppos,
2266 				do_proc_dointvec_minmax_conv, &param);
2267 }
2268 
2269 static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int write,
2270 				     void __user *buffer,
2271 				     size_t *lenp, loff_t *ppos,
2272 				     unsigned long convmul,
2273 				     unsigned long convdiv)
2274 {
2275 #define TMPBUFLEN 21
2276 	unsigned long *i, *min, *max, val;
2277 	int vleft, first=1, neg;
2278 	size_t len, left;
2279 	char buf[TMPBUFLEN], *p;
2280 	char __user *s = buffer;
2281 
2282 	if (!data || !table->maxlen || !*lenp ||
2283 	    (*ppos && !write)) {
2284 		*lenp = 0;
2285 		return 0;
2286 	}
2287 
2288 	i = (unsigned long *) data;
2289 	min = (unsigned long *) table->extra1;
2290 	max = (unsigned long *) table->extra2;
2291 	vleft = table->maxlen / sizeof(unsigned long);
2292 	left = *lenp;
2293 
2294 	for (; left && vleft--; i++, min++, max++, first=0) {
2295 		if (write) {
2296 			while (left) {
2297 				char c;
2298 				if (get_user(c, s))
2299 					return -EFAULT;
2300 				if (!isspace(c))
2301 					break;
2302 				left--;
2303 				s++;
2304 			}
2305 			if (!left)
2306 				break;
2307 			neg = 0;
2308 			len = left;
2309 			if (len > TMPBUFLEN-1)
2310 				len = TMPBUFLEN-1;
2311 			if (copy_from_user(buf, s, len))
2312 				return -EFAULT;
2313 			buf[len] = 0;
2314 			p = buf;
2315 			if (*p == '-' && left > 1) {
2316 				neg = 1;
2317 				p++;
2318 			}
2319 			if (*p < '0' || *p > '9')
2320 				break;
2321 			val = simple_strtoul(p, &p, 0) * convmul / convdiv ;
2322 			len = p-buf;
2323 			if ((len < left) && *p && !isspace(*p))
2324 				break;
2325 			if (neg)
2326 				val = -val;
2327 			s += len;
2328 			left -= len;
2329 
2330 			if(neg)
2331 				continue;
2332 			if ((min && val < *min) || (max && val > *max))
2333 				continue;
2334 			*i = val;
2335 		} else {
2336 			p = buf;
2337 			if (!first)
2338 				*p++ = '\t';
2339 			sprintf(p, "%lu", convdiv * (*i) / convmul);
2340 			len = strlen(buf);
2341 			if (len > left)
2342 				len = left;
2343 			if(copy_to_user(s, buf, len))
2344 				return -EFAULT;
2345 			left -= len;
2346 			s += len;
2347 		}
2348 	}
2349 
2350 	if (!write && !first && left) {
2351 		if(put_user('\n', s))
2352 			return -EFAULT;
2353 		left--, s++;
2354 	}
2355 	if (write) {
2356 		while (left) {
2357 			char c;
2358 			if (get_user(c, s++))
2359 				return -EFAULT;
2360 			if (!isspace(c))
2361 				break;
2362 			left--;
2363 		}
2364 	}
2365 	if (write && first)
2366 		return -EINVAL;
2367 	*lenp -= left;
2368 	*ppos += *lenp;
2369 	return 0;
2370 #undef TMPBUFLEN
2371 }
2372 
2373 static int do_proc_doulongvec_minmax(struct ctl_table *table, int write,
2374 				     void __user *buffer,
2375 				     size_t *lenp, loff_t *ppos,
2376 				     unsigned long convmul,
2377 				     unsigned long convdiv)
2378 {
2379 	return __do_proc_doulongvec_minmax(table->data, table, write,
2380 			buffer, lenp, ppos, convmul, convdiv);
2381 }
2382 
2383 /**
2384  * proc_doulongvec_minmax - read a vector of long integers with min/max values
2385  * @table: the sysctl table
2386  * @write: %TRUE if this is a write to the sysctl file
2387  * @buffer: the user buffer
2388  * @lenp: the size of the user buffer
2389  * @ppos: file position
2390  *
2391  * Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long
2392  * values from/to the user buffer, treated as an ASCII string.
2393  *
2394  * This routine will ensure the values are within the range specified by
2395  * table->extra1 (min) and table->extra2 (max).
2396  *
2397  * Returns 0 on success.
2398  */
2399 int proc_doulongvec_minmax(struct ctl_table *table, int write,
2400 			   void __user *buffer, size_t *lenp, loff_t *ppos)
2401 {
2402     return do_proc_doulongvec_minmax(table, write, buffer, lenp, ppos, 1l, 1l);
2403 }
2404 
2405 /**
2406  * proc_doulongvec_ms_jiffies_minmax - read a vector of millisecond values with min/max values
2407  * @table: the sysctl table
2408  * @write: %TRUE if this is a write to the sysctl file
2409  * @buffer: the user buffer
2410  * @lenp: the size of the user buffer
2411  * @ppos: file position
2412  *
2413  * Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long
2414  * values from/to the user buffer, treated as an ASCII string. The values
2415  * are treated as milliseconds, and converted to jiffies when they are stored.
2416  *
2417  * This routine will ensure the values are within the range specified by
2418  * table->extra1 (min) and table->extra2 (max).
2419  *
2420  * Returns 0 on success.
2421  */
2422 int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
2423 				      void __user *buffer,
2424 				      size_t *lenp, loff_t *ppos)
2425 {
2426     return do_proc_doulongvec_minmax(table, write, buffer,
2427 				     lenp, ppos, HZ, 1000l);
2428 }
2429 
2430 
2431 static int do_proc_dointvec_jiffies_conv(int *negp, unsigned long *lvalp,
2432 					 int *valp,
2433 					 int write, void *data)
2434 {
2435 	if (write) {
2436 		if (*lvalp > LONG_MAX / HZ)
2437 			return 1;
2438 		*valp = *negp ? -(*lvalp*HZ) : (*lvalp*HZ);
2439 	} else {
2440 		int val = *valp;
2441 		unsigned long lval;
2442 		if (val < 0) {
2443 			*negp = -1;
2444 			lval = (unsigned long)-val;
2445 		} else {
2446 			*negp = 0;
2447 			lval = (unsigned long)val;
2448 		}
2449 		*lvalp = lval / HZ;
2450 	}
2451 	return 0;
2452 }
2453 
2454 static int do_proc_dointvec_userhz_jiffies_conv(int *negp, unsigned long *lvalp,
2455 						int *valp,
2456 						int write, void *data)
2457 {
2458 	if (write) {
2459 		if (USER_HZ < HZ && *lvalp > (LONG_MAX / HZ) * USER_HZ)
2460 			return 1;
2461 		*valp = clock_t_to_jiffies(*negp ? -*lvalp : *lvalp);
2462 	} else {
2463 		int val = *valp;
2464 		unsigned long lval;
2465 		if (val < 0) {
2466 			*negp = -1;
2467 			lval = (unsigned long)-val;
2468 		} else {
2469 			*negp = 0;
2470 			lval = (unsigned long)val;
2471 		}
2472 		*lvalp = jiffies_to_clock_t(lval);
2473 	}
2474 	return 0;
2475 }
2476 
2477 static int do_proc_dointvec_ms_jiffies_conv(int *negp, unsigned long *lvalp,
2478 					    int *valp,
2479 					    int write, void *data)
2480 {
2481 	if (write) {
2482 		*valp = msecs_to_jiffies(*negp ? -*lvalp : *lvalp);
2483 	} else {
2484 		int val = *valp;
2485 		unsigned long lval;
2486 		if (val < 0) {
2487 			*negp = -1;
2488 			lval = (unsigned long)-val;
2489 		} else {
2490 			*negp = 0;
2491 			lval = (unsigned long)val;
2492 		}
2493 		*lvalp = jiffies_to_msecs(lval);
2494 	}
2495 	return 0;
2496 }
2497 
2498 /**
2499  * proc_dointvec_jiffies - read a vector of integers as seconds
2500  * @table: the sysctl table
2501  * @write: %TRUE if this is a write to the sysctl file
2502  * @buffer: the user buffer
2503  * @lenp: the size of the user buffer
2504  * @ppos: file position
2505  *
2506  * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
2507  * values from/to the user buffer, treated as an ASCII string.
2508  * The values read are assumed to be in seconds, and are converted into
2509  * jiffies.
2510  *
2511  * Returns 0 on success.
2512  */
2513 int proc_dointvec_jiffies(struct ctl_table *table, int write,
2514 			  void __user *buffer, size_t *lenp, loff_t *ppos)
2515 {
2516     return do_proc_dointvec(table,write,buffer,lenp,ppos,
2517 		    	    do_proc_dointvec_jiffies_conv,NULL);
2518 }
2519 
2520 /**
2521  * proc_dointvec_userhz_jiffies - read a vector of integers as 1/USER_HZ seconds
2522  * @table: the sysctl table
2523  * @write: %TRUE if this is a write to the sysctl file
2524  * @buffer: the user buffer
2525  * @lenp: the size of the user buffer
2526  * @ppos: pointer to the file position
2527  *
2528  * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
2529  * values from/to the user buffer, treated as an ASCII string.
2530  * The values read are assumed to be in 1/USER_HZ seconds, and
2531  * are converted into jiffies.
2532  *
2533  * Returns 0 on success.
2534  */
2535 int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
2536 				 void __user *buffer, size_t *lenp, loff_t *ppos)
2537 {
2538     return do_proc_dointvec(table,write,buffer,lenp,ppos,
2539 		    	    do_proc_dointvec_userhz_jiffies_conv,NULL);
2540 }
2541 
2542 /**
2543  * proc_dointvec_ms_jiffies - read a vector of integers as 1 milliseconds
2544  * @table: the sysctl table
2545  * @write: %TRUE if this is a write to the sysctl file
2546  * @buffer: the user buffer
2547  * @lenp: the size of the user buffer
2548  * @ppos: file position
2549  * @ppos: the current position in the file
2550  *
2551  * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
2552  * values from/to the user buffer, treated as an ASCII string.
2553  * The values read are assumed to be in 1/1000 seconds, and
2554  * are converted into jiffies.
2555  *
2556  * Returns 0 on success.
2557  */
2558 int proc_dointvec_ms_jiffies(struct ctl_table *table, int write,
2559 			     void __user *buffer, size_t *lenp, loff_t *ppos)
2560 {
2561 	return do_proc_dointvec(table, write, buffer, lenp, ppos,
2562 				do_proc_dointvec_ms_jiffies_conv, NULL);
2563 }
2564 
2565 static int proc_do_cad_pid(struct ctl_table *table, int write,
2566 			   void __user *buffer, size_t *lenp, loff_t *ppos)
2567 {
2568 	struct pid *new_pid;
2569 	pid_t tmp;
2570 	int r;
2571 
2572 	tmp = pid_vnr(cad_pid);
2573 
2574 	r = __do_proc_dointvec(&tmp, table, write, buffer,
2575 			       lenp, ppos, NULL, NULL);
2576 	if (r || !write)
2577 		return r;
2578 
2579 	new_pid = find_get_pid(tmp);
2580 	if (!new_pid)
2581 		return -ESRCH;
2582 
2583 	put_pid(xchg(&cad_pid, new_pid));
2584 	return 0;
2585 }
2586 
2587 #else /* CONFIG_PROC_FS */
2588 
2589 int proc_dostring(struct ctl_table *table, int write,
2590 		  void __user *buffer, size_t *lenp, loff_t *ppos)
2591 {
2592 	return -ENOSYS;
2593 }
2594 
2595 int proc_dointvec(struct ctl_table *table, int write,
2596 		  void __user *buffer, size_t *lenp, loff_t *ppos)
2597 {
2598 	return -ENOSYS;
2599 }
2600 
2601 int proc_dointvec_minmax(struct ctl_table *table, int write,
2602 		    void __user *buffer, size_t *lenp, loff_t *ppos)
2603 {
2604 	return -ENOSYS;
2605 }
2606 
2607 int proc_dointvec_jiffies(struct ctl_table *table, int write,
2608 		    void __user *buffer, size_t *lenp, loff_t *ppos)
2609 {
2610 	return -ENOSYS;
2611 }
2612 
2613 int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
2614 		    void __user *buffer, size_t *lenp, loff_t *ppos)
2615 {
2616 	return -ENOSYS;
2617 }
2618 
2619 int proc_dointvec_ms_jiffies(struct ctl_table *table, int write,
2620 			     void __user *buffer, size_t *lenp, loff_t *ppos)
2621 {
2622 	return -ENOSYS;
2623 }
2624 
2625 int proc_doulongvec_minmax(struct ctl_table *table, int write,
2626 		    void __user *buffer, size_t *lenp, loff_t *ppos)
2627 {
2628 	return -ENOSYS;
2629 }
2630 
2631 int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
2632 				      void __user *buffer,
2633 				      size_t *lenp, loff_t *ppos)
2634 {
2635     return -ENOSYS;
2636 }
2637 
2638 
2639 #endif /* CONFIG_PROC_FS */
2640 
2641 /*
2642  * No sense putting this after each symbol definition, twice,
2643  * exception granted :-)
2644  */
2645 EXPORT_SYMBOL(proc_dointvec);
2646 EXPORT_SYMBOL(proc_dointvec_jiffies);
2647 EXPORT_SYMBOL(proc_dointvec_minmax);
2648 EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
2649 EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
2650 EXPORT_SYMBOL(proc_dostring);
2651 EXPORT_SYMBOL(proc_doulongvec_minmax);
2652 EXPORT_SYMBOL(proc_doulongvec_ms_jiffies_minmax);
2653 EXPORT_SYMBOL(register_sysctl_table);
2654 EXPORT_SYMBOL(register_sysctl_paths);
2655 EXPORT_SYMBOL(unregister_sysctl_table);
2656