sysctl.c 61.6 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/*
 * sysctl.c: General linux system control interface
 *
 * Begun 24 March 1995, Stephen Tweedie
 * Added /proc support, Dec 1995
 * Added bdflush entry and intvec min/max checking, 2/23/96, Tom Dyas.
 * Added hooks for /proc/sys/net (minor, minor patch), 96/4/1, Mike Shaver.
 * Added kernel/java-{interpreter,appletviewer}, 96/5/10, Mike Shaver.
 * Dynamic registration fixes, Stephen Tweedie.
 * Added kswapd-interval, ctrl-alt-del, printk stuff, 1/8/97, Chris Horn.
 * Made sysctl support optional via CONFIG_SYSCTL, 1/10/97, Chris
 *  Horn.
 * Added proc_doulongvec_ms_jiffies_minmax, 09/08/99, Carlos H. Bauer.
 * Added proc_doulongvec_minmax, 09/08/99, Carlos H. Bauer.
 * Changed linked lists to use list.h instead of lists.h, 02/24/00, Bill
 *  Wendling.
 * The list_for_each() macro wasn't appropriate for the sysctl loop.
 *  Removed it and replaced it with older style, 03/23/00, Bill Wendling
 */

#include <linux/module.h>
#include <linux/mm.h>
#include <linux/swap.h>
#include <linux/slab.h>
#include <linux/sysctl.h>
Dave Young's avatar
Dave Young committed
26
#include <linux/signal.h>
Linus Torvalds's avatar
Linus Torvalds committed
27
#include <linux/proc_fs.h>
28
#include <linux/security.h>
Linus Torvalds's avatar
Linus Torvalds committed
29
#include <linux/ctype.h>
30
#include <linux/kmemcheck.h>
31
#include <linux/fs.h>
Linus Torvalds's avatar
Linus Torvalds committed
32 33
#include <linux/init.h>
#include <linux/kernel.h>
34
#include <linux/kobject.h>
35
#include <linux/net.h>
Linus Torvalds's avatar
Linus Torvalds committed
36 37 38
#include <linux/sysrq.h>
#include <linux/highuid.h>
#include <linux/writeback.h>
39
#include <linux/ratelimit.h>
Linus Torvalds's avatar
Linus Torvalds committed
40 41
#include <linux/hugetlb.h>
#include <linux/initrd.h>
42
#include <linux/key.h>
Linus Torvalds's avatar
Linus Torvalds committed
43 44 45 46
#include <linux/times.h>
#include <linux/limits.h>
#include <linux/dcache.h>
#include <linux/syscalls.h>
Adrian Bunk's avatar
Adrian Bunk committed
47
#include <linux/vmstat.h>
48 49
#include <linux/nfs_fs.h>
#include <linux/acpi.h>
50
#include <linux/reboot.h>
51
#include <linux/ftrace.h>
52
#include <linux/slow-work.h>
53
#include <linux/perf_event.h>
54
#include <linux/kprobes.h>
Linus Torvalds's avatar
Linus Torvalds committed
55 56 57 58

#include <asm/uaccess.h>
#include <asm/processor.h>

59 60
#ifdef CONFIG_X86
#include <asm/nmi.h>
61
#include <asm/stacktrace.h>
62
#include <asm/io.h>
63
#endif
Dave Young's avatar
Dave Young committed
64 65 66
#ifdef CONFIG_BSD_PROCESS_ACCT
#include <linux/acct.h>
#endif
Dave Young's avatar
Dave Young committed
67 68 69
#ifdef CONFIG_RT_MUTEXES
#include <linux/rtmutex.h>
#endif
Dave Young's avatar
Dave Young committed
70 71 72
#ifdef CONFIG_CHR_DEV_SG
#include <scsi/sg.h>
#endif
73

74

Linus Torvalds's avatar
Linus Torvalds committed
75 76 77 78 79
#if defined(CONFIG_SYSCTL)

/* External variables not in a header file. */
extern int sysctl_overcommit_memory;
extern int sysctl_overcommit_ratio;
80
extern int sysctl_panic_on_oom;
81
extern int sysctl_oom_kill_allocating_task;
82
extern int sysctl_oom_dump_tasks;
Linus Torvalds's avatar
Linus Torvalds committed
83 84
extern int max_threads;
extern int core_uses_pid;
Alan Cox's avatar
Alan Cox committed
85
extern int suid_dumpable;
Linus Torvalds's avatar
Linus Torvalds committed
86
extern char core_pattern[];
87
extern unsigned int core_pipe_limit;
Linus Torvalds's avatar
Linus Torvalds committed
88 89 90
extern int pid_max;
extern int min_free_kbytes;
extern int pid_max_min, pid_max_max;
Andrew Morton's avatar
Andrew Morton committed
91
extern int sysctl_drop_caches;
92
extern int percpu_pagelist_fraction;
93
extern int compat_log;
Arjan van de Ven's avatar
Arjan van de Ven committed
94
extern int latencytop_enabled;
95
extern int sysctl_nr_open_min, sysctl_nr_open_max;
96 97 98
#ifndef CONFIG_MMU
extern int sysctl_nr_trim_pages;
#endif
99
#ifdef CONFIG_BLOCK
100
extern int blk_iopoll_enabled;
101
#endif
Linus Torvalds's avatar
Linus Torvalds committed
102

103
/* Constants used for minimum and  maximum */
104
#ifdef CONFIG_DETECT_SOFTLOCKUP
105
static int sixty = 60;
106
static int neg_one = -1;
107 108 109
#endif

static int zero;
110 111
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;
112
static unsigned long one_ul = 1;
113
static int one_hundred = 100;
114 115 116
#ifdef CONFIG_PRINTK
static int ten_thousand = 10000;
#endif
117

118 119 120
/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;

Linus Torvalds's avatar
Linus Torvalds committed
121 122 123
/* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
static int maxolduid = 65535;
static int minolduid;
124
static int min_percpu_pagelist_fract = 8;
Linus Torvalds's avatar
Linus Torvalds committed
125 126 127

static int ngroups_max = NGROUPS_MAX;

128
#ifdef CONFIG_SPARC
129
#include <asm/system.h>
Linus Torvalds's avatar
Linus Torvalds committed
130 131
#endif

132 133 134 135
#ifdef CONFIG_SPARC64
extern int sysctl_tsb_ratio;
#endif

Linus Torvalds's avatar
Linus Torvalds committed
136 137 138 139 140
#ifdef __hppa__
extern int pwrsw_enabled;
extern int unaligned_enabled;
#endif

141
#ifdef CONFIG_S390
Linus Torvalds's avatar
Linus Torvalds committed
142 143 144 145
#ifdef CONFIG_MATHEMU
extern int sysctl_ieee_emulation_warnings;
#endif
extern int sysctl_userprocess_debug;
146
extern int spin_retry;
Linus Torvalds's avatar
Linus Torvalds committed
147 148
#endif

149 150
#ifdef CONFIG_IA64
extern int no_unaligned_warning;
151
extern int unaligned_dump_stack;
152 153
#endif

154 155
extern struct ratelimit_state printk_ratelimit_state;

156
#ifdef CONFIG_PROC_SYSCTL
157
static int proc_do_cad_pid(struct ctl_table *table, int write,
158
		  void __user *buffer, size_t *lenp, loff_t *ppos);
159
static int proc_taint(struct ctl_table *table, int write,
160
			       void __user *buffer, size_t *lenp, loff_t *ppos);
161
#endif
162

163
static struct ctl_table root_table[];
164 165
static struct ctl_table_root sysctl_table_root;
static struct ctl_table_header root_table_header = {
166
	.count = 1,
167
	.ctl_table = root_table,
168
	.ctl_entry = LIST_HEAD_INIT(sysctl_table_root.default_set.list),
169
	.root = &sysctl_table_root,
170
	.set = &sysctl_table_root.default_set,
171 172 173
};
static struct ctl_table_root sysctl_table_root = {
	.root_list = LIST_HEAD_INIT(sysctl_table_root.root_list),
174
	.default_set.list = LIST_HEAD_INIT(root_table_header.ctl_entry),
175
};
Linus Torvalds's avatar
Linus Torvalds committed
176

177 178 179 180 181 182
static struct ctl_table kern_table[];
static struct ctl_table vm_table[];
static struct ctl_table fs_table[];
static struct ctl_table debug_table[];
static struct ctl_table dev_table[];
extern struct ctl_table random_table[];
183
#ifdef CONFIG_INOTIFY_USER
184
extern struct ctl_table inotify_table[];
Robert Love's avatar
Robert Love committed
185
#endif
186 187 188
#ifdef CONFIG_EPOLL
extern struct ctl_table epoll_table[];
#endif
Linus Torvalds's avatar
Linus Torvalds committed
189 190 191 192 193

#ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
int sysctl_legacy_va_layout;
#endif

Peter Zijlstra's avatar
Peter Zijlstra committed
194 195
extern int prove_locking;
extern int lock_stat;
196

Linus Torvalds's avatar
Linus Torvalds committed
197 198
/* The default sysctl tables: */

199
static struct ctl_table root_table[] = {
Linus Torvalds's avatar
Linus Torvalds committed
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
	{
		.procname	= "kernel",
		.mode		= 0555,
		.child		= kern_table,
	},
	{
		.procname	= "vm",
		.mode		= 0555,
		.child		= vm_table,
	},
	{
		.procname	= "fs",
		.mode		= 0555,
		.child		= fs_table,
	},
	{
		.procname	= "debug",
		.mode		= 0555,
		.child		= debug_table,
	},
	{
		.procname	= "dev",
		.mode		= 0555,
		.child		= dev_table,
	},
225 226 227 228
/*
 * NOTE: do not add new entries to this table unless you have read
 * Documentation/sysctl/ctl_unnumbered.txt
 */
229
	{ }
Linus Torvalds's avatar
Linus Torvalds committed
230 231
};

Ingo Molnar's avatar
Ingo Molnar committed
232
#ifdef CONFIG_SCHED_DEBUG
233 234 235 236
static int min_sched_granularity_ns = 100000;		/* 100 usecs */
static int max_sched_granularity_ns = NSEC_PER_SEC;	/* 1 second */
static int min_wakeup_granularity_ns;			/* 0 usecs */
static int max_wakeup_granularity_ns = NSEC_PER_SEC;	/* 1 second */
237 238
static int min_sched_tunable_scaling = SCHED_TUNABLESCALING_NONE;
static int max_sched_tunable_scaling = SCHED_TUNABLESCALING_END-1;
239 240
static int min_sched_shares_ratelimit = 100000; /* 100 usec */
static int max_sched_shares_ratelimit = NSEC_PER_SEC; /* 1 second */
Ingo Molnar's avatar
Ingo Molnar committed
241 242
#endif

243
static struct ctl_table kern_table[] = {
244 245 246 247 248
	{
		.procname	= "sched_child_runs_first",
		.data		= &sysctl_sched_child_runs_first,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
249
		.proc_handler	= proc_dointvec,
250
	},
Ingo Molnar's avatar
Ingo Molnar committed
251 252
#ifdef CONFIG_SCHED_DEBUG
	{
253 254
		.procname	= "sched_min_granularity_ns",
		.data		= &sysctl_sched_min_granularity,
Ingo Molnar's avatar
Ingo Molnar committed
255 256
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
257
		.proc_handler	= sched_proc_update_handler,
258 259
		.extra1		= &min_sched_granularity_ns,
		.extra2		= &max_sched_granularity_ns,
Ingo Molnar's avatar
Ingo Molnar committed
260
	},
261 262 263 264 265
	{
		.procname	= "sched_latency_ns",
		.data		= &sysctl_sched_latency,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
266
		.proc_handler	= sched_proc_update_handler,
267 268 269
		.extra1		= &min_sched_granularity_ns,
		.extra2		= &max_sched_granularity_ns,
	},
Ingo Molnar's avatar
Ingo Molnar committed
270 271 272 273 274
	{
		.procname	= "sched_wakeup_granularity_ns",
		.data		= &sysctl_sched_wakeup_granularity,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
275
		.proc_handler	= sched_proc_update_handler,
Ingo Molnar's avatar
Ingo Molnar committed
276 277 278
		.extra1		= &min_wakeup_granularity_ns,
		.extra2		= &max_wakeup_granularity_ns,
	},
279 280 281 282 283
	{
		.procname	= "sched_shares_ratelimit",
		.data		= &sysctl_sched_shares_ratelimit,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
284
		.proc_handler	= sched_proc_update_handler,
285 286
		.extra1		= &min_sched_shares_ratelimit,
		.extra2		= &max_sched_shares_ratelimit,
287
	},
288 289 290 291 292
	{
		.procname	= "sched_tunable_scaling",
		.data		= &sysctl_sched_tunable_scaling,
		.maxlen		= sizeof(enum sched_tunable_scaling),
		.mode		= 0644,
293
		.proc_handler	= sched_proc_update_handler,
294 295
		.extra1		= &min_sched_tunable_scaling,
		.extra2		= &max_sched_tunable_scaling,
296
	},
297 298 299 300 301
	{
		.procname	= "sched_shares_thresh",
		.data		= &sysctl_sched_shares_thresh,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
302
		.proc_handler	= proc_dointvec_minmax,
303 304
		.extra1		= &zero,
	},
305 306 307 308 309
	{
		.procname	= "sched_migration_cost",
		.data		= &sysctl_sched_migration_cost,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
310
		.proc_handler	= proc_dointvec,
311
	},
312 313 314 315
	{
		.procname	= "sched_nr_migrate",
		.data		= &sysctl_sched_nr_migrate,
		.maxlen		= sizeof(unsigned int),
Peter Zijlstra's avatar
Peter Zijlstra committed
316
		.mode		= 0644,
317
		.proc_handler	= proc_dointvec,
Peter Zijlstra's avatar
Peter Zijlstra committed
318
	},
319 320 321 322 323
	{
		.procname	= "sched_time_avg",
		.data		= &sysctl_sched_time_avg,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
324
		.proc_handler	= proc_dointvec,
325
	},
326 327 328 329 330
	{
		.procname	= "timer_migration",
		.data		= &sysctl_timer_migration,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
331
		.proc_handler	= proc_dointvec_minmax,
332 333
		.extra1		= &zero,
		.extra2		= &one,
Peter Zijlstra's avatar
Peter Zijlstra committed
334
	},
335
#endif
Peter Zijlstra's avatar
Peter Zijlstra committed
336 337 338 339 340
	{
		.procname	= "sched_rt_period_us",
		.data		= &sysctl_sched_rt_period,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
341
		.proc_handler	= sched_rt_handler,
Peter Zijlstra's avatar
Peter Zijlstra committed
342 343 344 345 346 347
	},
	{
		.procname	= "sched_rt_runtime_us",
		.data		= &sysctl_sched_rt_runtime,
		.maxlen		= sizeof(int),
		.mode		= 0644,
348
		.proc_handler	= sched_rt_handler,
Peter Zijlstra's avatar
Peter Zijlstra committed
349
	},
350 351 352 353 354
	{
		.procname	= "sched_compat_yield",
		.data		= &sysctl_sched_compat_yield,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
355
		.proc_handler	= proc_dointvec,
356
	},
Peter Zijlstra's avatar
Peter Zijlstra committed
357 358 359 360 361 362
#ifdef CONFIG_PROVE_LOCKING
	{
		.procname	= "prove_locking",
		.data		= &prove_locking,
		.maxlen		= sizeof(int),
		.mode		= 0644,
363
		.proc_handler	= proc_dointvec,
Peter Zijlstra's avatar
Peter Zijlstra committed
364 365 366 367 368 369 370 371
	},
#endif
#ifdef CONFIG_LOCK_STAT
	{
		.procname	= "lock_stat",
		.data		= &lock_stat,
		.maxlen		= sizeof(int),
		.mode		= 0644,
372
		.proc_handler	= proc_dointvec,
Peter Zijlstra's avatar
Peter Zijlstra committed
373
	},
Ingo Molnar's avatar
Ingo Molnar committed
374
#endif
Linus Torvalds's avatar
Linus Torvalds committed
375 376 377 378 379
	{
		.procname	= "panic",
		.data		= &panic_timeout,
		.maxlen		= sizeof(int),
		.mode		= 0644,
380
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
381 382 383 384 385 386
	},
	{
		.procname	= "core_uses_pid",
		.data		= &core_uses_pid,
		.maxlen		= sizeof(int),
		.mode		= 0644,
387
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
388 389 390 391
	},
	{
		.procname	= "core_pattern",
		.data		= core_pattern,
392
		.maxlen		= CORENAME_MAX_SIZE,
Linus Torvalds's avatar
Linus Torvalds committed
393
		.mode		= 0644,
394
		.proc_handler	= proc_dostring,
Linus Torvalds's avatar
Linus Torvalds committed
395
	},
396 397 398 399 400
	{
		.procname	= "core_pipe_limit",
		.data		= &core_pipe_limit,
		.maxlen		= sizeof(unsigned int),
		.mode		= 0644,
401
		.proc_handler	= proc_dointvec,
402
	},
403
#ifdef CONFIG_PROC_SYSCTL
Linus Torvalds's avatar
Linus Torvalds committed
404 405
	{
		.procname	= "tainted",
Andi Kleen's avatar
Andi Kleen committed
406
		.maxlen 	= sizeof(long),
407
		.mode		= 0644,
408
		.proc_handler	= proc_taint,
Linus Torvalds's avatar
Linus Torvalds committed
409
	},
410
#endif
Arjan van de Ven's avatar
Arjan van de Ven committed
411 412 413 414 415 416
#ifdef CONFIG_LATENCYTOP
	{
		.procname	= "latencytop",
		.data		= &latencytop_enabled,
		.maxlen		= sizeof(int),
		.mode		= 0644,
417
		.proc_handler	= proc_dointvec,
Arjan van de Ven's avatar
Arjan van de Ven committed
418 419
	},
#endif
Linus Torvalds's avatar
Linus Torvalds committed
420 421 422 423 424 425
#ifdef CONFIG_BLK_DEV_INITRD
	{
		.procname	= "real-root-dev",
		.data		= &real_root_dev,
		.maxlen		= sizeof(int),
		.mode		= 0644,
426
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
427 428
	},
#endif
Ingo Molnar's avatar
Ingo Molnar committed
429 430 431 432 433
	{
		.procname	= "print-fatal-signals",
		.data		= &print_fatal_signals,
		.maxlen		= sizeof(int),
		.mode		= 0644,
434
		.proc_handler	= proc_dointvec,
Ingo Molnar's avatar
Ingo Molnar committed
435
	},
436
#ifdef CONFIG_SPARC
Linus Torvalds's avatar
Linus Torvalds committed
437 438 439 440 441
	{
		.procname	= "reboot-cmd",
		.data		= reboot_command,
		.maxlen		= 256,
		.mode		= 0644,
442
		.proc_handler	= proc_dostring,
Linus Torvalds's avatar
Linus Torvalds committed
443 444 445 446 447 448
	},
	{
		.procname	= "stop-a",
		.data		= &stop_a_enabled,
		.maxlen		= sizeof (int),
		.mode		= 0644,
449
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
450 451 452 453 454 455
	},
	{
		.procname	= "scons-poweroff",
		.data		= &scons_pwroff,
		.maxlen		= sizeof (int),
		.mode		= 0644,
456
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
457 458
	},
#endif
459 460 461 462 463 464
#ifdef CONFIG_SPARC64
	{
		.procname	= "tsb-ratio",
		.data		= &sysctl_tsb_ratio,
		.maxlen		= sizeof (int),
		.mode		= 0644,
465
		.proc_handler	= proc_dointvec,
466 467
	},
#endif
Linus Torvalds's avatar
Linus Torvalds committed
468 469 470 471 472 473
#ifdef __hppa__
	{
		.procname	= "soft-power",
		.data		= &pwrsw_enabled,
		.maxlen		= sizeof (int),
	 	.mode		= 0644,
474
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
475 476 477 478 479 480
	},
	{
		.procname	= "unaligned-trap",
		.data		= &unaligned_enabled,
		.maxlen		= sizeof (int),
		.mode		= 0644,
481
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
482 483 484 485 486 487 488
	},
#endif
	{
		.procname	= "ctrl-alt-del",
		.data		= &C_A_D,
		.maxlen		= sizeof(int),
		.mode		= 0644,
489
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
490
	},
491
#ifdef CONFIG_FUNCTION_TRACER
492 493 494 495 496
	{
		.procname	= "ftrace_enabled",
		.data		= &ftrace_enabled,
		.maxlen		= sizeof(int),
		.mode		= 0644,
497
		.proc_handler	= ftrace_enable_sysctl,
498 499
	},
#endif
500 501 502 503 504 505
#ifdef CONFIG_STACK_TRACER
	{
		.procname	= "stack_tracer_enabled",
		.data		= &stack_tracer_enabled,
		.maxlen		= sizeof(int),
		.mode		= 0644,
506
		.proc_handler	= stack_trace_sysctl,
507 508
	},
#endif
509 510
#ifdef CONFIG_TRACING
	{
Peter Zijlstra's avatar
Peter Zijlstra committed
511
		.procname	= "ftrace_dump_on_oops",
512 513 514
		.data		= &ftrace_dump_on_oops,
		.maxlen		= sizeof(int),
		.mode		= 0644,
515
		.proc_handler	= proc_dointvec,
516 517
	},
#endif
518
#ifdef CONFIG_MODULES
Linus Torvalds's avatar
Linus Torvalds committed
519 520 521 522 523
	{
		.procname	= "modprobe",
		.data		= &modprobe_path,
		.maxlen		= KMOD_PATH_LEN,
		.mode		= 0644,
524
		.proc_handler	= proc_dostring,
Linus Torvalds's avatar
Linus Torvalds committed
525
	},
526 527 528 529 530 531
	{
		.procname	= "modules_disabled",
		.data		= &modules_disabled,
		.maxlen		= sizeof(int),
		.mode		= 0644,
		/* only handle a transition from default "0" to "1" */
532
		.proc_handler	= proc_dointvec_minmax,
533 534 535
		.extra1		= &one,
		.extra2		= &one,
	},
Linus Torvalds's avatar
Linus Torvalds committed
536
#endif
Andrew Morton's avatar
Andrew Morton committed
537
#if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)
Linus Torvalds's avatar
Linus Torvalds committed
538 539
	{
		.procname	= "hotplug",
540 541
		.data		= &uevent_helper,
		.maxlen		= UEVENT_HELPER_PATH_LEN,
Linus Torvalds's avatar
Linus Torvalds committed
542
		.mode		= 0644,
543
		.proc_handler	= proc_dostring,
Linus Torvalds's avatar
Linus Torvalds committed
544 545 546 547 548 549 550 551
	},
#endif
#ifdef CONFIG_CHR_DEV_SG
	{
		.procname	= "sg-big-buff",
		.data		= &sg_big_buff,
		.maxlen		= sizeof (int),
		.mode		= 0444,
552
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
553 554 555 556 557 558 559 560
	},
#endif
#ifdef CONFIG_BSD_PROCESS_ACCT
	{
		.procname	= "acct",
		.data		= &acct_parm,
		.maxlen		= 3*sizeof(int),
		.mode		= 0644,
561
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
562 563 564 565 566
	},
#endif
#ifdef CONFIG_MAGIC_SYSRQ
	{
		.procname	= "sysrq",
567
		.data		= &__sysrq_enabled,
Linus Torvalds's avatar
Linus Torvalds committed
568 569
		.maxlen		= sizeof (int),
		.mode		= 0644,
570
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
571 572
	},
#endif
573
#ifdef CONFIG_PROC_SYSCTL
Linus Torvalds's avatar
Linus Torvalds committed
574 575
	{
		.procname	= "cad_pid",
576
		.data		= NULL,
Linus Torvalds's avatar
Linus Torvalds committed
577 578
		.maxlen		= sizeof (int),
		.mode		= 0600,
579
		.proc_handler	= proc_do_cad_pid,
Linus Torvalds's avatar
Linus Torvalds committed
580
	},
581
#endif
Linus Torvalds's avatar
Linus Torvalds committed
582 583 584 585 586
	{
		.procname	= "threads-max",
		.data		= &max_threads,
		.maxlen		= sizeof(int),
		.mode		= 0644,
587
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
588 589 590 591 592 593 594 595 596 597 598
	},
	{
		.procname	= "random",
		.mode		= 0555,
		.child		= random_table,
	},
	{
		.procname	= "overflowuid",
		.data		= &overflowuid,
		.maxlen		= sizeof(int),
		.mode		= 0644,
599
		.proc_handler	= proc_dointvec_minmax,
Linus Torvalds's avatar
Linus Torvalds committed
600 601 602 603 604 605 606 607
		.extra1		= &minolduid,
		.extra2		= &maxolduid,
	},
	{
		.procname	= "overflowgid",
		.data		= &overflowgid,
		.maxlen		= sizeof(int),
		.mode		= 0644,
608
		.proc_handler	= proc_dointvec_minmax,
Linus Torvalds's avatar
Linus Torvalds committed
609 610 611
		.extra1		= &minolduid,
		.extra2		= &maxolduid,
	},
612
#ifdef CONFIG_S390
Linus Torvalds's avatar
Linus Torvalds committed
613 614 615 616 617 618
#ifdef CONFIG_MATHEMU
	{
		.procname	= "ieee_emulation_warnings",
		.data		= &sysctl_ieee_emulation_warnings,
		.maxlen		= sizeof(int),
		.mode		= 0644,
619
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
620 621 622 623 624 625 626
	},
#endif
	{
		.procname	= "userprocess_debug",
		.data		= &sysctl_userprocess_debug,
		.maxlen		= sizeof(int),
		.mode		= 0644,
627
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
628 629 630 631 632 633 634
	},
#endif
	{
		.procname	= "pid_max",
		.data		= &pid_max,
		.maxlen		= sizeof (int),
		.mode		= 0644,
635
		.proc_handler	= proc_dointvec_minmax,
Linus Torvalds's avatar
Linus Torvalds committed
636 637 638 639 640 641 642 643
		.extra1		= &pid_max_min,
		.extra2		= &pid_max_max,
	},
	{
		.procname	= "panic_on_oops",
		.data		= &panic_on_oops,
		.maxlen		= sizeof(int),
		.mode		= 0644,
644
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
645
	},
646 647 648 649 650 651
#if defined CONFIG_PRINTK
	{
		.procname	= "printk",
		.data		= &console_loglevel,
		.maxlen		= 4*sizeof(int),
		.mode		= 0644,
652
		.proc_handler	= proc_dointvec,
653
	},
Linus Torvalds's avatar
Linus Torvalds committed
654 655
	{
		.procname	= "printk_ratelimit",
Dave Young's avatar
Dave Young committed
656
		.data		= &printk_ratelimit_state.interval,
Linus Torvalds's avatar
Linus Torvalds committed
657 658
		.maxlen		= sizeof(int),
		.mode		= 0644,
659
		.proc_handler	= proc_dointvec_jiffies,
Linus Torvalds's avatar
Linus Torvalds committed
660 661 662
	},
	{
		.procname	= "printk_ratelimit_burst",
Dave Young's avatar
Dave Young committed
663
		.data		= &printk_ratelimit_state.burst,
Linus Torvalds's avatar
Linus Torvalds committed
664 665
		.maxlen		= sizeof(int),
		.mode		= 0644,
666
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
667
	},
668 669 670 671 672
	{
		.procname	= "printk_delay",
		.data		= &printk_delay_msec,
		.maxlen		= sizeof(int),
		.mode		= 0644,
673
		.proc_handler	= proc_dointvec_minmax,
674 675 676
		.extra1		= &zero,
		.extra2		= &ten_thousand,
	},
677
#endif
Linus Torvalds's avatar
Linus Torvalds committed
678 679 680 681 682
	{
		.procname	= "ngroups_max",
		.data		= &ngroups_max,
		.maxlen		= sizeof (int),
		.mode		= 0444,
683
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
684 685 686 687 688 689 690
	},
#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86)
	{
		.procname       = "unknown_nmi_panic",
		.data           = &unknown_nmi_panic,
		.maxlen         = sizeof (int),
		.mode           = 0644,
691
		.proc_handler   = proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
692
	},
693 694 695 696 697
	{
		.procname       = "nmi_watchdog",
		.data           = &nmi_watchdog_enabled,
		.maxlen         = sizeof (int),
		.mode           = 0644,
698
		.proc_handler   = proc_nmi_enabled,
Linus Torvalds's avatar
Linus Torvalds committed
699 700 701
	},
#endif
#if defined(CONFIG_X86)
702 703 704 705 706
	{
		.procname	= "panic_on_unrecovered_nmi",
		.data		= &panic_on_unrecovered_nmi,
		.maxlen		= sizeof(int),
		.mode		= 0644,
707
		.proc_handler	= proc_dointvec,
708
	},
709 710 711 712 713
	{
		.procname	= "panic_on_io_nmi",
		.data		= &panic_on_io_nmi,
		.maxlen		= sizeof(int),
		.mode		= 0644,
714
		.proc_handler	= proc_dointvec,
715
	},
Linus Torvalds's avatar
Linus Torvalds committed
716 717 718 719 720
	{
		.procname	= "bootloader_type",
		.data		= &bootloader_type,
		.maxlen		= sizeof (int),
		.mode		= 0444,
721
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
722
	},
723 724 725 726 727
	{
		.procname	= "bootloader_version",
		.data		= &bootloader_version,
		.maxlen		= sizeof (int),
		.mode		= 0444,
728
		.proc_handler	= proc_dointvec,
729
	},
730 731 732 733 734
	{
		.procname	= "kstack_depth_to_print",
		.data		= &kstack_depth_to_print,
		.maxlen		= sizeof(int),
		.mode		= 0644,
735
		.proc_handler	= proc_dointvec,
736
	},
737 738 739 740 741
	{
		.procname	= "io_delay_type",
		.data		= &io_delay_type,
		.maxlen		= sizeof(int),
		.mode		= 0644,
742
		.proc_handler	= proc_dointvec,
743
	},
Linus Torvalds's avatar
Linus Torvalds committed
744
#endif
745
#if defined(CONFIG_MMU)
Linus Torvalds's avatar
Linus Torvalds committed
746 747 748 749 750
	{
		.procname	= "randomize_va_space",
		.data		= &randomize_va_space,
		.maxlen		= sizeof(int),
		.mode		= 0644,
751
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
752
	},
753
#endif
754
#if defined(CONFIG_S390) && defined(CONFIG_SMP)
755 756 757 758 759
	{
		.procname	= "spin_retry",
		.data		= &spin_retry,
		.maxlen		= sizeof (int),
		.mode		= 0644,
760
		.proc_handler	= proc_dointvec,
761
	},
762
#endif
Len Brown's avatar
Len Brown committed
763
#if	defined(CONFIG_ACPI_SLEEP) && defined(CONFIG_X86)
764 765
	{
		.procname	= "acpi_video_flags",
766
		.data		= &acpi_realmode_flags,
767 768
		.maxlen		= sizeof (unsigned long),
		.mode		= 0644,
769
		.proc_handler	= proc_doulongvec_minmax,
770
	},
771 772 773 774 775 776 777
#endif
#ifdef CONFIG_IA64
	{
		.procname	= "ignore-unaligned-usertrap",
		.data		= &no_unaligned_warning,
		.maxlen		= sizeof (int),
	 	.mode		= 0644,
778
		.proc_handler	= proc_dointvec,
779
	},
780 781 782 783 784
	{
		.procname	= "unaligned-dump-stack",
		.data		= &unaligned_dump_stack,
		.maxlen		= sizeof (int),
		.mode		= 0644,
785
		.proc_handler	= proc_dointvec,
786
	},
787
#endif
788
#ifdef CONFIG_DETECT_SOFTLOCKUP
789 790 791 792 793
	{
		.procname	= "softlockup_panic",
		.data		= &softlockup_panic,
		.maxlen		= sizeof(int),
		.mode		= 0644,
794
		.proc_handler	= proc_dointvec_minmax,
795 796 797
		.extra1		= &zero,
		.extra2		= &one,
	},
798 799 800
	{
		.procname	= "softlockup_thresh",
		.data		= &softlockup_thresh,
801
		.maxlen		= sizeof(int),
802
		.mode		= 0644,
803
		.proc_handler	= proc_dosoftlockup_thresh,
804
		.extra1		= &neg_one,
805 806
		.extra2		= &sixty,
	},
807 808 809 810 811 812 813
#endif
#ifdef CONFIG_DETECT_HUNG_TASK
	{
		.procname	= "hung_task_panic",
		.data		= &sysctl_hung_task_panic,
		.maxlen		= sizeof(int),
		.mode		= 0644,
814
		.proc_handler	= proc_dointvec_minmax,
815 816 817
		.extra1		= &zero,
		.extra2		= &one,
	},
818 819 820
	{
		.procname	= "hung_task_check_count",
		.data		= &sysctl_hung_task_check_count,
Ingo Molnar's avatar
Ingo Molnar committed
821
		.maxlen		= sizeof(unsigned long),
822
		.mode		= 0644,
823
		.proc_handler	= proc_doulongvec_minmax,
824 825 826 827
	},
	{
		.procname	= "hung_task_timeout_secs",
		.data		= &sysctl_hung_task_timeout_secs,
Ingo Molnar's avatar
Ingo Molnar committed
828
		.maxlen		= sizeof(unsigned long),
829
		.mode		= 0644,
830
		.proc_handler	= proc_dohung_task_timeout_secs,
831 832 833 834
	},
	{
		.procname	= "hung_task_warnings",
		.data		= &sysctl_hung_task_warnings,
Ingo Molnar's avatar
Ingo Molnar committed
835
		.maxlen		= sizeof(unsigned long),
836
		.mode		= 0644,
837
		.proc_handler	= proc_doulongvec_minmax,
838
	},
839
#endif
840 841 842 843 844 845
#ifdef CONFIG_COMPAT
	{
		.procname	= "compat-log",
		.data		= &compat_log,
		.maxlen		= sizeof (int),
	 	.mode		= 0644,
846
		.proc_handler	= proc_dointvec,
847
	},
848
#endif
Ingo Molnar's avatar
Ingo Molnar committed
849 850 851 852 853 854
#ifdef CONFIG_RT_MUTEXES
	{
		.procname	= "max_lock_depth",
		.data		= &max_lock_depth,
		.maxlen		= sizeof(int),
		.mode		= 0644,
855
		.proc_handler	= proc_dointvec,
Ingo Molnar's avatar
Ingo Molnar committed
856
	},
Kees Cook's avatar
Kees Cook committed
857
#endif
858 859 860 861 862
	{
		.procname	= "poweroff_cmd",
		.data		= &poweroff_cmd,
		.maxlen		= POWEROFF_CMD_PATH_LEN,
		.mode		= 0644,
863
		.proc_handler	= proc_dostring,
864
	},
865 866 867 868 869 870 871
#ifdef CONFIG_KEYS
	{
		.procname	= "keys",
		.mode		= 0555,
		.child		= key_sysctls,
	},
#endif
872 873 874 875 876 877
#ifdef CONFIG_RCU_TORTURE_TEST
	{
		.procname       = "rcutorture_runnable",
		.data           = &rcutorture_runnable,
		.maxlen         = sizeof(int),
		.mode           = 0644,
878
		.proc_handler	= proc_dointvec,
879 880
	},
#endif
881 882 883 884 885 886 887
#ifdef CONFIG_SLOW_WORK
	{
		.procname	= "slow-work",
		.mode		= 0555,
		.child		= slow_work_sysctls,
	},
#endif
888
#ifdef CONFIG_PERF_EVENTS
889
	{
890 891 892
		.procname	= "perf_event_paranoid",
		.data		= &sysctl_perf_event_paranoid,
		.maxlen		= sizeof(sysctl_perf_event_paranoid),
893
		.mode		= 0644,
894
		.proc_handler	= proc_dointvec,
895
	},
896
	{
897 898 899
		.procname	= "perf_event_mlock_kb",
		.data		= &sysctl_perf_event_mlock,
		.maxlen		= sizeof(sysctl_perf_event_mlock),
900
		.mode		= 0644,
901
		.proc_handler	= proc_dointvec,
902
	},
903
	{
904 905 906
		.procname	= "perf_event_max_sample_rate",
		.data		= &sysctl_perf_event_sample_rate,
		.maxlen		= sizeof(sysctl_perf_event_sample_rate),
907
		.mode		= 0644,
908
		.proc_handler	= proc_dointvec,
909
	},
910
#endif
911 912 913 914 915 916
#ifdef CONFIG_KMEMCHECK
	{
		.procname	= "kmemcheck",
		.data		= &kmemcheck_enabled,
		.maxlen		= sizeof(int),
		.mode		= 0644,
917
		.proc_handler	= proc_dointvec,
918 919
	},
#endif
920
#ifdef CONFIG_BLOCK
921 922 923 924 925
	{
		.procname	= "blk_iopoll",
		.data		= &blk_iopoll_enabled,
		.maxlen		= sizeof(int),
		.mode		= 0644,
926
		.proc_handler	= proc_dointvec,
927
	},
928
#endif
929 930 931 932
/*
 * NOTE: do not add new entries to this table unless you have read
 * Documentation/sysctl/ctl_unnumbered.txt
 */
933
	{ }
Linus Torvalds's avatar
Linus Torvalds committed
934 935
};

936
static struct ctl_table vm_table[] = {
Linus Torvalds's avatar
Linus Torvalds committed
937 938 939 940 941
	{
		.procname	= "overcommit_memory",
		.data		= &sysctl_overcommit_memory,
		.maxlen		= sizeof(sysctl_overcommit_memory),
		.mode		= 0644,
942
		.proc_handler	= proc_dointvec,
Linus Torvalds's avatar
Linus Torvalds committed
943
	},
944 945 946 947 948
	{
		.procname	= "panic_on_oom",
		.data		= &sysctl_panic_on_oom,
		.maxlen		= sizeof(sysctl_panic_on_oom),
		.mode		= 0644,
949
		.proc_handler	= proc_dointvec,
950
	},
951 952 953 954 955
	{
		.procname	= "oom_kill_allocating_task",
		.data		= &sysctl_oom_kill_allocating_task,
		.maxlen		= sizeof(sysctl_oom_kill_allocating_task),
		.mode		= 0644,
956
		.proc_handler	= proc_dointvec,
957
	},