Blame view

kernel/sysctl.c 60.7 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  /*
   * 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
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
21
22
23
24
  #include <linux/module.h>
  #include <linux/mm.h>
  #include <linux/swap.h>
  #include <linux/slab.h>
  #include <linux/sysctl.h>
5a04cca6c   Akinobu Mita   sysctl: use bitma...
25
  #include <linux/bitmap.h>
d33ed52d5   Dave Young   sysctl extern cle...
26
  #include <linux/signal.h>
455cd5ab3   Dan Rosenberg   kptr_restrict for...
27
  #include <linux/printk.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
  #include <linux/proc_fs.h>
72c2d5823   Andrew Morgan   V3 file capabilit...
29
  #include <linux/security.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
  #include <linux/ctype.h>
dfec072ec   Vegard Nossum   kmemcheck: add th...
31
  #include <linux/kmemcheck.h>
fd4b616b0   Steven Rostedt   sysctl: suppress ...
32
  #include <linux/kmemleak.h>
62239ac2b   Adrian Bunk   proper prototype ...
33
  #include <linux/fs.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34
35
  #include <linux/init.h>
  #include <linux/kernel.h>
0296b2281   Kay Sievers   [PATCH] remove CO...
36
  #include <linux/kobject.h>
20380731b   Arnaldo Carvalho de Melo   [NET]: Fix sparse...
37
  #include <linux/net.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38
39
40
  #include <linux/sysrq.h>
  #include <linux/highuid.h>
  #include <linux/writeback.h>
3fff4c42b   Ingo Molnar   printk: Remove ra...
41
  #include <linux/ratelimit.h>
76ab0f530   Mel Gorman   mm: compaction: a...
42
  #include <linux/compaction.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
43
  #include <linux/hugetlb.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
  #include <linux/initrd.h>
0b77f5bfb   David Howells   keys: make the ke...
45
  #include <linux/key.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46
47
48
  #include <linux/times.h>
  #include <linux/limits.h>
  #include <linux/dcache.h>
6e006701c   Alexey Dobriyan   dnotify: move dir...
49
  #include <linux/dnotify.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
50
  #include <linux/syscalls.h>
c748e1340   Adrian Bunk   mm/vmstat.c: prop...
51
  #include <linux/vmstat.h>
c255d844d   Pavel Machek   [PATCH] suspend-t...
52
53
  #include <linux/nfs_fs.h>
  #include <linux/acpi.h>
10a0a8d4e   Jeremy Fitzhardinge   Add common orderl...
54
  #include <linux/reboot.h>
b0fc494fa   Steven Rostedt   ftrace: add ftrac...
55
  #include <linux/ftrace.h>
cdd6c482c   Ingo Molnar   perf: Do the big ...
56
  #include <linux/perf_event.h>
b2be84df9   Masami Hiramatsu   kprobes: Jump opt...
57
  #include <linux/kprobes.h>
b492e95be   Jens Axboe   pipe: set lower a...
58
  #include <linux/pipe_fs_i.h>
8e4228e1e   David Rientjes   oom: move sysctl ...
59
  #include <linux/oom.h>
17f60a7da   Eric Paris   capabilites: allo...
60
  #include <linux/kmod.h>
73efc0394   Dan Ballard   kernel/sysctl.c: ...
61
  #include <linux/capability.h>
404015308   Al Viro   security: trim se...
62
  #include <linux/binfmts.h>
cf4aebc29   Clark Williams   sched: Move sched...
63
  #include <linux/sched/sysctl.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
66
  
  #include <asm/uaccess.h>
  #include <asm/processor.h>
29cbc78b9   Andi Kleen   [PATCH] x86: Clea...
67
68
  #ifdef CONFIG_X86
  #include <asm/nmi.h>
0741f4d20   Chuck Ebbert   [PATCH] x86: add ...
69
  #include <asm/stacktrace.h>
6e7c40259   Ingo Molnar   x86: various chan...
70
  #include <asm/io.h>
29cbc78b9   Andi Kleen   [PATCH] x86: Clea...
71
  #endif
d550bbd40   David Howells   Disintegrate asm/...
72
73
74
  #ifdef CONFIG_SPARC
  #include <asm/setup.h>
  #endif
c55b7c3e8   Dave Young   sysctl extern cle...
75
76
77
  #ifdef CONFIG_BSD_PROCESS_ACCT
  #include <linux/acct.h>
  #endif
4f0e056fd   Dave Young   sysctl extern cle...
78
79
80
  #ifdef CONFIG_RT_MUTEXES
  #include <linux/rtmutex.h>
  #endif
2edf5e498   Dave Young   sysctl extern cle...
81
82
83
  #if defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_LOCK_STAT)
  #include <linux/lockdep.h>
  #endif
15485a468   Dave Young   sysctl extern cle...
84
85
86
  #ifdef CONFIG_CHR_DEV_SG
  #include <scsi/sg.h>
  #endif
29cbc78b9   Andi Kleen   [PATCH] x86: Clea...
87

58687acba   Don Zickus   lockup_detector: ...
88
  #ifdef CONFIG_LOCKUP_DETECTOR
504d7cf10   Don Zickus   nmi_watchdog: Com...
89
90
  #include <linux/nmi.h>
  #endif
7058cb02d   Eric W. Biederman   sysctl: deprecate...
91

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
92
93
94
  #if defined(CONFIG_SYSCTL)
  
  /* External variables not in a header file. */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
96
97
  extern int sysctl_overcommit_memory;
  extern int sysctl_overcommit_ratio;
  extern int max_threads;
d6e711448   Alan Cox   [PATCH] setuid co...
98
  extern int suid_dumpable;
046d662f4   Alex Kelly   coredump: make co...
99
100
  #ifdef CONFIG_COREDUMP
  extern int core_uses_pid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
101
  extern char core_pattern[];
a293980c2   Neil Horman   exec: let do_core...
102
  extern unsigned int core_pipe_limit;
046d662f4   Alex Kelly   coredump: make co...
103
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
  extern int pid_max;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105
  extern int pid_max_min, pid_max_max;
8ad4b1fb8   Rohit Seth   [PATCH] Make high...
106
  extern int percpu_pagelist_fraction;
bebfa1013   Andi Kleen   [PATCH] x86_64: A...
107
  extern int compat_log;
9745512ce   Arjan van de Ven   sched: latencytop...
108
  extern int latencytop_enabled;
eceea0b3d   Al Viro   [PATCH] avoid mul...
109
  extern int sysctl_nr_open_min, sysctl_nr_open_max;
dd8632a12   Paul Mundt   NOMMU: Make mmap ...
110
111
112
  #ifndef CONFIG_MMU
  extern int sysctl_nr_trim_pages;
  #endif
cb684b5bc   Jens Axboe   block: fix linkag...
113
  #ifdef CONFIG_BLOCK
5e605b64a   Jens Axboe   block: add blk-io...
114
  extern int blk_iopoll_enabled;
cb684b5bc   Jens Axboe   block: fix linkag...
115
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
116

c4f3b63fe   Ravikiran G Thirumalai   softlockup: add a...
117
  /* Constants used for minimum and  maximum */
2508ce184   Don Zickus   lockup_detector: ...
118
  #ifdef CONFIG_LOCKUP_DETECTOR
c4f3b63fe   Ravikiran G Thirumalai   softlockup: add a...
119
120
  static int sixty = 60;
  #endif
c4f3b63fe   Ravikiran G Thirumalai   softlockup: add a...
121
  static int zero;
cd5f9a4c3   Linus Torvalds   kernel/sysctl.c: ...
122
123
  static int __maybe_unused one = 1;
  static int __maybe_unused two = 2;
cb16e95fa   Petr Holasek   sysctl: add some ...
124
  static int __maybe_unused three = 3;
fc3501d41   Sven Wegener   mm: fix dirty_byt...
125
  static unsigned long one_ul = 1;
c4f3b63fe   Ravikiran G Thirumalai   softlockup: add a...
126
  static int one_hundred = 100;
af91322ef   Dave Young   printk: add print...
127
128
129
  #ifdef CONFIG_PRINTK
  static int ten_thousand = 10000;
  #endif
c4f3b63fe   Ravikiran G Thirumalai   softlockup: add a...
130

9e4a5bda8   Andrea Righi   mm: prevent divid...
131
132
  /* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
  static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
133
134
135
  /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
  static int maxolduid = 65535;
  static int minolduid;
8ad4b1fb8   Rohit Seth   [PATCH] Make high...
136
  static int min_percpu_pagelist_fract = 8;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
138
  
  static int ngroups_max = NGROUPS_MAX;
73efc0394   Dan Ballard   kernel/sysctl.c: ...
139
  static const int cap_last_cap = CAP_LAST_CAP;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
140

d14f17294   Dave Young   sysctl extern cle...
141
142
143
  #ifdef CONFIG_INOTIFY_USER
  #include <linux/inotify.h>
  #endif
72c57ed50   David S. Miller   sysctl: Use CONFI...
144
  #ifdef CONFIG_SPARC
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
  #endif
0871420fa   David S. Miller   sparc64: Add tsb-...
146
147
148
  #ifdef CONFIG_SPARC64
  extern int sysctl_tsb_ratio;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
149
150
  #ifdef __hppa__
  extern int pwrsw_enabled;
bf14e3b97   Vineet Gupta   sysctl: Enable PA...
151
152
153
  #endif
  
  #ifdef CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
154
155
  extern int unaligned_enabled;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
156

d2b176ed8   Jes Sorensen   [IA64] sysctl opt...
157
  #ifdef CONFIG_IA64
88fc241f5   Doug Chapman   [IA64] dump stack...
158
  extern int unaligned_dump_stack;
d2b176ed8   Jes Sorensen   [IA64] sysctl opt...
159
  #endif
b6fca7253   Vineet Gupta   sysctl: Enable IA...
160
161
162
  #ifdef CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN
  extern int no_unaligned_warning;
  #endif
d6f8ff738   Randy Dunlap   [PATCH] cad_pid s...
163
  #ifdef CONFIG_PROC_SYSCTL
8d65af789   Alexey Dobriyan   sysctl: remove "s...
164
  static int proc_do_cad_pid(struct ctl_table *table, int write,
9ec52099e   Cedric Le Goater   [PATCH] replace c...
165
  		  void __user *buffer, size_t *lenp, loff_t *ppos);
8d65af789   Alexey Dobriyan   sysctl: remove "s...
166
  static int proc_taint(struct ctl_table *table, int write,
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
167
  			       void __user *buffer, size_t *lenp, loff_t *ppos);
d6f8ff738   Randy Dunlap   [PATCH] cad_pid s...
168
  #endif
9ec52099e   Cedric Le Goater   [PATCH] replace c...
169

bfdc0b497   Richard Weinberger   sysctl: restrict ...
170
  #ifdef CONFIG_PRINTK
620f6e8e8   Kees Cook   sysctl: fix write...
171
  static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
bfdc0b497   Richard Weinberger   sysctl: restrict ...
172
173
  				void __user *buffer, size_t *lenp, loff_t *ppos);
  #endif
54b501992   Kees Cook   coredump: warn ab...
174
175
  static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
  		void __user *buffer, size_t *lenp, loff_t *ppos);
046d662f4   Alex Kelly   coredump: make co...
176
  #ifdef CONFIG_COREDUMP
54b501992   Kees Cook   coredump: warn ab...
177
178
  static int proc_dostring_coredump(struct ctl_table *table, int write,
  		void __user *buffer, size_t *lenp, loff_t *ppos);
046d662f4   Alex Kelly   coredump: make co...
179
  #endif
54b501992   Kees Cook   coredump: warn ab...
180

97f5f0cd8   Dmitry Torokhov   Input: implement ...
181
  #ifdef CONFIG_MAGIC_SYSRQ
8c6a98b22   Andy Whitcroft   Input: sysrq - en...
182
183
  /* Note: sysrq code uses it's own private copy */
  static int __sysrq_enabled = SYSRQ_DEFAULT_ENABLE;
97f5f0cd8   Dmitry Torokhov   Input: implement ...
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
  
  static int sysrq_sysctl_handler(ctl_table *table, int write,
  				void __user *buffer, size_t *lenp,
  				loff_t *ppos)
  {
  	int error;
  
  	error = proc_dointvec(table, write, buffer, lenp, ppos);
  	if (error)
  		return error;
  
  	if (write)
  		sysrq_toggle_support(__sysrq_enabled);
  
  	return 0;
  }
  
  #endif
d8217f076   Eric W. Biederman   sysctl core: Stop...
202
203
204
205
206
207
  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[];
7ef9964e6   Davide Libenzi   epoll: introduce ...
208
209
210
  #ifdef CONFIG_EPOLL
  extern struct ctl_table epoll_table[];
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
211
212
213
214
  
  #ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
  int sysctl_legacy_va_layout;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
215
  /* The default sysctl tables: */
de4e83bd6   Eric W. Biederman   sysctl: Register ...
216
  static struct ctl_table sysctl_base_table[] = {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
217
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
218
219
220
221
222
  		.procname	= "kernel",
  		.mode		= 0555,
  		.child		= kern_table,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
223
224
225
226
  		.procname	= "vm",
  		.mode		= 0555,
  		.child		= vm_table,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
227
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
228
229
230
231
232
  		.procname	= "fs",
  		.mode		= 0555,
  		.child		= fs_table,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
233
234
235
236
237
  		.procname	= "debug",
  		.mode		= 0555,
  		.child		= debug_table,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
238
239
240
241
  		.procname	= "dev",
  		.mode		= 0555,
  		.child		= dev_table,
  	},
6fce56ec9   Eric W. Biederman   sysctl: Remove re...
242
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
243
  };
77e54a1f8   Ingo Molnar   sched: add CFS de...
244
  #ifdef CONFIG_SCHED_DEBUG
73c4efd2c   Eric Dumazet   sched: sysctl, pr...
245
246
247
248
  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 */
cbee9f88e   Peter Zijlstra   mm: numa: Add fau...
249
  #ifdef CONFIG_SMP
1983a922a   Christian Ehrhardt   sched: Make tunab...
250
251
  static int min_sched_tunable_scaling = SCHED_TUNABLESCALING_NONE;
  static int max_sched_tunable_scaling = SCHED_TUNABLESCALING_END-1;
cbee9f88e   Peter Zijlstra   mm: numa: Add fau...
252
253
  #endif /* CONFIG_SMP */
  #endif /* CONFIG_SCHED_DEBUG */
77e54a1f8   Ingo Molnar   sched: add CFS de...
254

5e7719058   Mel Gorman   mm: compaction: a...
255
256
257
258
  #ifdef CONFIG_COMPACTION
  static int min_extfrag_threshold;
  static int max_extfrag_threshold = 1000;
  #endif
d8217f076   Eric W. Biederman   sysctl core: Stop...
259
  static struct ctl_table kern_table[] = {
2bba22c50   Mike Galbraith   sched: Turn off c...
260
  	{
2bba22c50   Mike Galbraith   sched: Turn off c...
261
262
263
264
  		.procname	= "sched_child_runs_first",
  		.data		= &sysctl_sched_child_runs_first,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
265
  		.proc_handler	= proc_dointvec,
2bba22c50   Mike Galbraith   sched: Turn off c...
266
  	},
77e54a1f8   Ingo Molnar   sched: add CFS de...
267
268
  #ifdef CONFIG_SCHED_DEBUG
  	{
b2be5e96d   Peter Zijlstra   sched: reintroduc...
269
270
  		.procname	= "sched_min_granularity_ns",
  		.data		= &sysctl_sched_min_granularity,
77e54a1f8   Ingo Molnar   sched: add CFS de...
271
272
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
702a7c760   Linus Torvalds   Merge branch 'sch...
273
  		.proc_handler	= sched_proc_update_handler,
b2be5e96d   Peter Zijlstra   sched: reintroduc...
274
275
  		.extra1		= &min_sched_granularity_ns,
  		.extra2		= &max_sched_granularity_ns,
77e54a1f8   Ingo Molnar   sched: add CFS de...
276
277
  	},
  	{
218050855   Peter Zijlstra   sched: adaptive s...
278
279
280
281
  		.procname	= "sched_latency_ns",
  		.data		= &sysctl_sched_latency,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
702a7c760   Linus Torvalds   Merge branch 'sch...
282
  		.proc_handler	= sched_proc_update_handler,
218050855   Peter Zijlstra   sched: adaptive s...
283
284
285
286
  		.extra1		= &min_sched_granularity_ns,
  		.extra2		= &max_sched_granularity_ns,
  	},
  	{
77e54a1f8   Ingo Molnar   sched: add CFS de...
287
288
289
290
  		.procname	= "sched_wakeup_granularity_ns",
  		.data		= &sysctl_sched_wakeup_granularity,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
702a7c760   Linus Torvalds   Merge branch 'sch...
291
  		.proc_handler	= sched_proc_update_handler,
77e54a1f8   Ingo Molnar   sched: add CFS de...
292
293
294
  		.extra1		= &min_wakeup_granularity_ns,
  		.extra2		= &max_wakeup_granularity_ns,
  	},
cbee9f88e   Peter Zijlstra   mm: numa: Add fau...
295
  #ifdef CONFIG_SMP
77e54a1f8   Ingo Molnar   sched: add CFS de...
296
  	{
1983a922a   Christian Ehrhardt   sched: Make tunab...
297
298
299
300
  		.procname	= "sched_tunable_scaling",
  		.data		= &sysctl_sched_tunable_scaling,
  		.maxlen		= sizeof(enum sched_tunable_scaling),
  		.mode		= 0644,
702a7c760   Linus Torvalds   Merge branch 'sch...
301
  		.proc_handler	= sched_proc_update_handler,
1983a922a   Christian Ehrhardt   sched: Make tunab...
302
303
  		.extra1		= &min_sched_tunable_scaling,
  		.extra2		= &max_sched_tunable_scaling,
2398f2c6d   Peter Zijlstra   sched: update sha...
304
305
  	},
  	{
d00535db4   Namhyung Kim   sched: Add time u...
306
  		.procname	= "sched_migration_cost_ns",
da84d9617   Ingo Molnar   sched: reintroduc...
307
308
309
  		.data		= &sysctl_sched_migration_cost,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
310
  		.proc_handler	= proc_dointvec,
da84d9617   Ingo Molnar   sched: reintroduc...
311
  	},
b82d9fdd8   Peter Zijlstra   sched: avoid larg...
312
  	{
b82d9fdd8   Peter Zijlstra   sched: avoid larg...
313
314
315
  		.procname	= "sched_nr_migrate",
  		.data		= &sysctl_sched_nr_migrate,
  		.maxlen		= sizeof(unsigned int),
fa85ae241   Peter Zijlstra   sched: rt time limit
316
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
317
  		.proc_handler	= proc_dointvec,
fa85ae241   Peter Zijlstra   sched: rt time limit
318
  	},
cd1bb94b4   Arun R Bharadwaj   timers: /proc/sys...
319
  	{
d00535db4   Namhyung Kim   sched: Add time u...
320
  		.procname	= "sched_time_avg_ms",
e9e9250bc   Peter Zijlstra   sched: Scale down...
321
322
323
  		.data		= &sysctl_sched_time_avg,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
324
  		.proc_handler	= proc_dointvec,
e9e9250bc   Peter Zijlstra   sched: Scale down...
325
326
  	},
  	{
d00535db4   Namhyung Kim   sched: Add time u...
327
  		.procname	= "sched_shares_window_ns",
a7a4f8a75   Paul Turner   sched: Add sysctl...
328
329
330
331
332
333
  		.data		= &sysctl_sched_shares_window,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
  	{
cd1bb94b4   Arun R Bharadwaj   timers: /proc/sys...
334
335
336
337
  		.procname	= "timer_migration",
  		.data		= &sysctl_timer_migration,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
338
  		.proc_handler	= proc_dointvec_minmax,
bfdb4d9f0   Arun R Bharadwaj   timers: Fix timer...
339
340
  		.extra1		= &zero,
  		.extra2		= &one,
fa85ae241   Peter Zijlstra   sched: rt time limit
341
  	},
cbee9f88e   Peter Zijlstra   mm: numa: Add fau...
342
343
344
  #endif /* CONFIG_SMP */
  #ifdef CONFIG_NUMA_BALANCING
  	{
4b96a29ba   Peter Zijlstra   mm: sched: numa: ...
345
346
347
348
349
350
351
  		.procname	= "numa_balancing_scan_delay_ms",
  		.data		= &sysctl_numa_balancing_scan_delay,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
  	{
cbee9f88e   Peter Zijlstra   mm: numa: Add fau...
352
353
354
355
356
357
358
  		.procname	= "numa_balancing_scan_period_min_ms",
  		.data		= &sysctl_numa_balancing_scan_period_min,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
  	{
b8593bfda   Mel Gorman   mm: sched: Adapt ...
359
360
361
362
363
364
365
  		.procname	= "numa_balancing_scan_period_reset",
  		.data		= &sysctl_numa_balancing_scan_period_reset,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
  	{
cbee9f88e   Peter Zijlstra   mm: numa: Add fau...
366
367
368
369
370
371
  		.procname	= "numa_balancing_scan_period_max_ms",
  		.data		= &sysctl_numa_balancing_scan_period_max,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
6e5fb223e   Peter Zijlstra   mm: sched: numa: ...
372
373
374
375
376
377
378
  	{
  		.procname	= "numa_balancing_scan_size_mb",
  		.data		= &sysctl_numa_balancing_scan_size,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
cbee9f88e   Peter Zijlstra   mm: numa: Add fau...
379
380
  #endif /* CONFIG_NUMA_BALANCING */
  #endif /* CONFIG_SCHED_DEBUG */
1799e35d5   Ingo Molnar   sched: add /proc/...
381
  	{
9f0c1e560   Peter Zijlstra   sched: rt-group: ...
382
383
384
385
  		.procname	= "sched_rt_period_us",
  		.data		= &sysctl_sched_rt_period,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
386
  		.proc_handler	= sched_rt_handler,
9f0c1e560   Peter Zijlstra   sched: rt-group: ...
387
388
  	},
  	{
9f0c1e560   Peter Zijlstra   sched: rt-group: ...
389
390
391
392
  		.procname	= "sched_rt_runtime_us",
  		.data		= &sysctl_sched_rt_runtime,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
393
  		.proc_handler	= sched_rt_handler,
9f0c1e560   Peter Zijlstra   sched: rt-group: ...
394
  	},
ce0dbbbb3   Clark Williams   sched/rt: Add a t...
395
396
397
398
399
400
401
  	{
  		.procname	= "sched_rr_timeslice_ms",
  		.data		= &sched_rr_timeslice,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= sched_rr_handler,
  	},
5091faa44   Mike Galbraith   sched: Add 'autog...
402
403
404
405
406
407
  #ifdef CONFIG_SCHED_AUTOGROUP
  	{
  		.procname	= "sched_autogroup_enabled",
  		.data		= &sysctl_sched_autogroup_enabled,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
1747b21fe   Yong Zhang   sched, autogroup,...
408
  		.proc_handler	= proc_dointvec_minmax,
5091faa44   Mike Galbraith   sched: Add 'autog...
409
410
411
412
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
  #endif
ec12cb7f3   Paul Turner   sched: Accumulate...
413
414
415
416
417
418
419
420
421
422
  #ifdef CONFIG_CFS_BANDWIDTH
  	{
  		.procname	= "sched_cfs_bandwidth_slice_us",
  		.data		= &sysctl_sched_cfs_bandwidth_slice,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &one,
  	},
  #endif
f20786ff4   Peter Zijlstra   lockstat: core in...
423
424
  #ifdef CONFIG_PROVE_LOCKING
  	{
f20786ff4   Peter Zijlstra   lockstat: core in...
425
426
427
428
  		.procname	= "prove_locking",
  		.data		= &prove_locking,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
429
  		.proc_handler	= proc_dointvec,
f20786ff4   Peter Zijlstra   lockstat: core in...
430
431
432
433
  	},
  #endif
  #ifdef CONFIG_LOCK_STAT
  	{
f20786ff4   Peter Zijlstra   lockstat: core in...
434
435
436
437
  		.procname	= "lock_stat",
  		.data		= &lock_stat,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
438
  		.proc_handler	= proc_dointvec,
f20786ff4   Peter Zijlstra   lockstat: core in...
439
440
  	},
  #endif
77e54a1f8   Ingo Molnar   sched: add CFS de...
441
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
442
443
444
445
  		.procname	= "panic",
  		.data		= &panic_timeout,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
446
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
447
  	},
046d662f4   Alex Kelly   coredump: make co...
448
  #ifdef CONFIG_COREDUMP
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
449
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
450
451
452
453
  		.procname	= "core_uses_pid",
  		.data		= &core_uses_pid,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
454
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
455
456
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
457
458
  		.procname	= "core_pattern",
  		.data		= core_pattern,
71ce92f3f   Dan Aloni   make sysctl/kerne...
459
  		.maxlen		= CORENAME_MAX_SIZE,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
460
  		.mode		= 0644,
54b501992   Kees Cook   coredump: warn ab...
461
  		.proc_handler	= proc_dostring_coredump,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
462
  	},
a293980c2   Neil Horman   exec: let do_core...
463
  	{
a293980c2   Neil Horman   exec: let do_core...
464
465
466
467
  		.procname	= "core_pipe_limit",
  		.data		= &core_pipe_limit,
  		.maxlen		= sizeof(unsigned int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
468
  		.proc_handler	= proc_dointvec,
a293980c2   Neil Horman   exec: let do_core...
469
  	},
046d662f4   Alex Kelly   coredump: make co...
470
  #endif
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
471
  #ifdef CONFIG_PROC_SYSCTL
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
472
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
473
  		.procname	= "tainted",
25ddbb18a   Andi Kleen   Make the taint fl...
474
  		.maxlen 	= sizeof(long),
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
475
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
476
  		.proc_handler	= proc_taint,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
477
  	},
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
478
  #endif
9745512ce   Arjan van de Ven   sched: latencytop...
479
480
481
482
483
484
  #ifdef CONFIG_LATENCYTOP
  	{
  		.procname	= "latencytop",
  		.data		= &latencytop_enabled,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
485
  		.proc_handler	= proc_dointvec,
9745512ce   Arjan van de Ven   sched: latencytop...
486
487
  	},
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
488
489
  #ifdef CONFIG_BLK_DEV_INITRD
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
490
491
492
493
  		.procname	= "real-root-dev",
  		.data		= &real_root_dev,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
494
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
495
496
  	},
  #endif
45807a1df   Ingo Molnar   vdso: print fatal...
497
  	{
45807a1df   Ingo Molnar   vdso: print fatal...
498
499
500
501
  		.procname	= "print-fatal-signals",
  		.data		= &print_fatal_signals,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
502
  		.proc_handler	= proc_dointvec,
45807a1df   Ingo Molnar   vdso: print fatal...
503
  	},
72c57ed50   David S. Miller   sysctl: Use CONFI...
504
  #ifdef CONFIG_SPARC
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
505
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
506
507
508
509
  		.procname	= "reboot-cmd",
  		.data		= reboot_command,
  		.maxlen		= 256,
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
510
  		.proc_handler	= proc_dostring,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
511
512
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
513
514
515
516
  		.procname	= "stop-a",
  		.data		= &stop_a_enabled,
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
517
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
518
519
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
520
521
522
523
  		.procname	= "scons-poweroff",
  		.data		= &scons_pwroff,
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
524
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
525
526
  	},
  #endif
0871420fa   David S. Miller   sparc64: Add tsb-...
527
528
  #ifdef CONFIG_SPARC64
  	{
0871420fa   David S. Miller   sparc64: Add tsb-...
529
530
531
532
  		.procname	= "tsb-ratio",
  		.data		= &sysctl_tsb_ratio,
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
533
  		.proc_handler	= proc_dointvec,
0871420fa   David S. Miller   sparc64: Add tsb-...
534
535
  	},
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
536
537
  #ifdef __hppa__
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
538
539
540
541
  		.procname	= "soft-power",
  		.data		= &pwrsw_enabled,
  		.maxlen		= sizeof (int),
  	 	.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
542
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
543
  	},
bf14e3b97   Vineet Gupta   sysctl: Enable PA...
544
545
  #endif
  #ifdef CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
546
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
547
548
549
550
  		.procname	= "unaligned-trap",
  		.data		= &unaligned_enabled,
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
551
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
552
553
554
  	},
  #endif
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
555
556
557
558
  		.procname	= "ctrl-alt-del",
  		.data		= &C_A_D,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
559
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
560
  	},
606576ce8   Steven Rostedt   ftrace: rename FT...
561
  #ifdef CONFIG_FUNCTION_TRACER
b0fc494fa   Steven Rostedt   ftrace: add ftrac...
562
  	{
b0fc494fa   Steven Rostedt   ftrace: add ftrac...
563
564
565
566
  		.procname	= "ftrace_enabled",
  		.data		= &ftrace_enabled,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
567
  		.proc_handler	= ftrace_enable_sysctl,
b0fc494fa   Steven Rostedt   ftrace: add ftrac...
568
569
  	},
  #endif
f38f1d2aa   Steven Rostedt   trace: add a way ...
570
571
  #ifdef CONFIG_STACK_TRACER
  	{
f38f1d2aa   Steven Rostedt   trace: add a way ...
572
573
574
575
  		.procname	= "stack_tracer_enabled",
  		.data		= &stack_tracer_enabled,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
576
  		.proc_handler	= stack_trace_sysctl,
f38f1d2aa   Steven Rostedt   trace: add a way ...
577
578
  	},
  #endif
944ac4259   Steven Rostedt   ftrace: ftrace du...
579
580
  #ifdef CONFIG_TRACING
  	{
3299b4dd1   Peter Zijlstra   ftrace: sysctl typo
581
  		.procname	= "ftrace_dump_on_oops",
944ac4259   Steven Rostedt   ftrace: ftrace du...
582
583
584
  		.data		= &ftrace_dump_on_oops,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
585
  		.proc_handler	= proc_dointvec,
944ac4259   Steven Rostedt   ftrace: ftrace du...
586
  	},
de7edd314   Steven Rostedt (Red Hat)   tracing: Disable ...
587
588
589
590
591
592
593
  	{
  		.procname	= "traceoff_on_warning",
  		.data		= &__disable_trace_on_warning,
  		.maxlen		= sizeof(__disable_trace_on_warning),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
944ac4259   Steven Rostedt   ftrace: ftrace du...
594
  #endif
a1ef5adb4   Johannes Berg   remove CONFIG_KMO...
595
  #ifdef CONFIG_MODULES
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
596
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
597
598
599
600
  		.procname	= "modprobe",
  		.data		= &modprobe_path,
  		.maxlen		= KMOD_PATH_LEN,
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
601
  		.proc_handler	= proc_dostring,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
602
  	},
3d43321b7   Kees Cook   modules: sysctl t...
603
  	{
3d43321b7   Kees Cook   modules: sysctl t...
604
605
606
607
608
  		.procname	= "modules_disabled",
  		.data		= &modules_disabled,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		/* only handle a transition from default "0" to "1" */
6d4561110   Eric W. Biederman   sysctl: Drop & in...
609
  		.proc_handler	= proc_dointvec_minmax,
3d43321b7   Kees Cook   modules: sysctl t...
610
611
612
  		.extra1		= &one,
  		.extra2		= &one,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
613
  #endif
3b572b506   Bill Pemberton   sysctl: remove CO...
614

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
615
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
616
  		.procname	= "hotplug",
312c004d3   Kay Sievers   [PATCH] driver co...
617
618
  		.data		= &uevent_helper,
  		.maxlen		= UEVENT_HELPER_PATH_LEN,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
619
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
620
  		.proc_handler	= proc_dostring,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
621
  	},
3b572b506   Bill Pemberton   sysctl: remove CO...
622

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
623
624
  #ifdef CONFIG_CHR_DEV_SG
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
625
626
627
628
  		.procname	= "sg-big-buff",
  		.data		= &sg_big_buff,
  		.maxlen		= sizeof (int),
  		.mode		= 0444,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
629
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
630
631
632
633
  	},
  #endif
  #ifdef CONFIG_BSD_PROCESS_ACCT
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
634
635
636
637
  		.procname	= "acct",
  		.data		= &acct_parm,
  		.maxlen		= 3*sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
638
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
639
640
  	},
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
641
642
  #ifdef CONFIG_MAGIC_SYSRQ
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
643
  		.procname	= "sysrq",
5d6f647fc   Ingo Molnar   [PATCH] debug: ad...
644
  		.data		= &__sysrq_enabled,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
645
646
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
97f5f0cd8   Dmitry Torokhov   Input: implement ...
647
  		.proc_handler	= sysrq_sysctl_handler,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
648
649
  	},
  #endif
d6f8ff738   Randy Dunlap   [PATCH] cad_pid s...
650
  #ifdef CONFIG_PROC_SYSCTL
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
651
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
652
  		.procname	= "cad_pid",
9ec52099e   Cedric Le Goater   [PATCH] replace c...
653
  		.data		= NULL,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
654
655
  		.maxlen		= sizeof (int),
  		.mode		= 0600,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
656
  		.proc_handler	= proc_do_cad_pid,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
657
  	},
d6f8ff738   Randy Dunlap   [PATCH] cad_pid s...
658
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
659
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
660
661
662
663
  		.procname	= "threads-max",
  		.data		= &max_threads,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
664
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
665
666
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
667
668
669
670
  		.procname	= "random",
  		.mode		= 0555,
  		.child		= random_table,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
671
  	{
17f60a7da   Eric Paris   capabilites: allo...
672
673
674
675
676
  		.procname	= "usermodehelper",
  		.mode		= 0555,
  		.child		= usermodehelper_table,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
677
678
679
680
  		.procname	= "overflowuid",
  		.data		= &overflowuid,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
681
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
682
683
684
685
  		.extra1		= &minolduid,
  		.extra2		= &maxolduid,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
686
687
688
689
  		.procname	= "overflowgid",
  		.data		= &overflowgid,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
690
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
691
692
693
  		.extra1		= &minolduid,
  		.extra2		= &maxolduid,
  	},
347a8dc3b   Martin Schwidefsky   [PATCH] s390: cle...
694
  #ifdef CONFIG_S390
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
695
696
  #ifdef CONFIG_MATHEMU
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
697
698
699
700
  		.procname	= "ieee_emulation_warnings",
  		.data		= &sysctl_ieee_emulation_warnings,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
701
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
702
703
  	},
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
704
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
705
  		.procname	= "userprocess_debug",
ab3c68ee5   Heiko Carstens   [S390] debug: ena...
706
  		.data		= &show_unhandled_signals,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
707
708
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
709
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
710
711
712
  	},
  #endif
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
713
714
715
716
  		.procname	= "pid_max",
  		.data		= &pid_max,
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
717
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
718
719
720
721
  		.extra1		= &pid_max_min,
  		.extra2		= &pid_max_max,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
722
723
724
725
  		.procname	= "panic_on_oops",
  		.data		= &panic_on_oops,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
726
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
727
  	},
7ef3d2fd1   Joe Perches   printk_ratelimit(...
728
729
  #if defined CONFIG_PRINTK
  	{
7ef3d2fd1   Joe Perches   printk_ratelimit(...
730
731
732
733
  		.procname	= "printk",
  		.data		= &console_loglevel,
  		.maxlen		= 4*sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
734
  		.proc_handler	= proc_dointvec,
7ef3d2fd1   Joe Perches   printk_ratelimit(...
735
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
736
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
737
  		.procname	= "printk_ratelimit",
717115e1a   Dave Young   printk ratelimiti...
738
  		.data		= &printk_ratelimit_state.interval,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
739
740
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
741
  		.proc_handler	= proc_dointvec_jiffies,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
742
743
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
744
  		.procname	= "printk_ratelimit_burst",
717115e1a   Dave Young   printk ratelimiti...
745
  		.data		= &printk_ratelimit_state.burst,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
746
747
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
748
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
749
  	},
af91322ef   Dave Young   printk: add print...
750
  	{
af91322ef   Dave Young   printk: add print...
751
752
753
754
  		.procname	= "printk_delay",
  		.data		= &printk_delay_msec,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
755
  		.proc_handler	= proc_dointvec_minmax,
af91322ef   Dave Young   printk: add print...
756
757
758
  		.extra1		= &zero,
  		.extra2		= &ten_thousand,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
759
  	{
eaf06b241   Dan Rosenberg   Restrict unprivil...
760
761
762
763
  		.procname	= "dmesg_restrict",
  		.data		= &dmesg_restrict,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
620f6e8e8   Kees Cook   sysctl: fix write...
764
  		.proc_handler	= proc_dointvec_minmax_sysadmin,
eaf06b241   Dan Rosenberg   Restrict unprivil...
765
766
767
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
455cd5ab3   Dan Rosenberg   kptr_restrict for...
768
769
770
771
772
  	{
  		.procname	= "kptr_restrict",
  		.data		= &kptr_restrict,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
620f6e8e8   Kees Cook   sysctl: fix write...
773
  		.proc_handler	= proc_dointvec_minmax_sysadmin,
455cd5ab3   Dan Rosenberg   kptr_restrict for...
774
775
776
  		.extra1		= &zero,
  		.extra2		= &two,
  	},
df6e61d4c   Joe Perches   kernel/sysctl.c: ...
777
  #endif
eaf06b241   Dan Rosenberg   Restrict unprivil...
778
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
779
780
781
782
  		.procname	= "ngroups_max",
  		.data		= &ngroups_max,
  		.maxlen		= sizeof (int),
  		.mode		= 0444,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
783
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
784
  	},
73efc0394   Dan Ballard   kernel/sysctl.c: ...
785
786
787
788
789
790
791
  	{
  		.procname	= "cap_last_cap",
  		.data		= (void *)&cap_last_cap,
  		.maxlen		= sizeof(int),
  		.mode		= 0444,
  		.proc_handler	= proc_dointvec,
  	},
58687acba   Don Zickus   lockup_detector: ...
792
  #if defined(CONFIG_LOCKUP_DETECTOR)
504d7cf10   Don Zickus   nmi_watchdog: Com...
793
  	{
58687acba   Don Zickus   lockup_detector: ...
794
  		.procname       = "watchdog",
3c00ea82c   Frederic Weisbecker   watchdog: Rename ...
795
  		.data           = &watchdog_user_enabled,
504d7cf10   Don Zickus   nmi_watchdog: Com...
796
797
  		.maxlen         = sizeof (int),
  		.mode           = 0644,
586692a5a   Mandeep Singh Baines   watchdog: Disable...
798
799
800
  		.proc_handler   = proc_dowatchdog,
  		.extra1		= &zero,
  		.extra2		= &one,
58687acba   Don Zickus   lockup_detector: ...
801
802
803
  	},
  	{
  		.procname	= "watchdog_thresh",
586692a5a   Mandeep Singh Baines   watchdog: Disable...
804
  		.data		= &watchdog_thresh,
58687acba   Don Zickus   lockup_detector: ...
805
806
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
586692a5a   Mandeep Singh Baines   watchdog: Disable...
807
  		.proc_handler	= proc_dowatchdog,
a6572f84c   Li Zefan   watchdog: Disallo...
808
  		.extra1		= &zero,
58687acba   Don Zickus   lockup_detector: ...
809
  		.extra2		= &sixty,
504d7cf10   Don Zickus   nmi_watchdog: Com...
810
  	},
2508ce184   Don Zickus   lockup_detector: ...
811
812
813
814
815
816
817
818
819
  	{
  		.procname	= "softlockup_panic",
  		.data		= &softlockup_panic,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
5dc305587   Don Zickus   x86, NMI: Add bac...
820
821
  	{
  		.procname       = "nmi_watchdog",
3c00ea82c   Frederic Weisbecker   watchdog: Rename ...
822
  		.data           = &watchdog_user_enabled,
5dc305587   Don Zickus   x86, NMI: Add bac...
823
824
  		.maxlen         = sizeof (int),
  		.mode           = 0644,
586692a5a   Mandeep Singh Baines   watchdog: Disable...
825
826
827
  		.proc_handler   = proc_dowatchdog,
  		.extra1		= &zero,
  		.extra2		= &one,
5dc305587   Don Zickus   x86, NMI: Add bac...
828
829
830
831
832
833
834
835
836
837
  	},
  #endif
  #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86)
  	{
  		.procname       = "unknown_nmi_panic",
  		.data           = &unknown_nmi_panic,
  		.maxlen         = sizeof (int),
  		.mode           = 0644,
  		.proc_handler   = proc_dointvec,
  	},
504d7cf10   Don Zickus   nmi_watchdog: Com...
838
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
839
840
  #if defined(CONFIG_X86)
  	{
8da5adda9   Don Zickus   [PATCH] x86: Allo...
841
842
843
844
  		.procname	= "panic_on_unrecovered_nmi",
  		.data		= &panic_on_unrecovered_nmi,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
845
  		.proc_handler	= proc_dointvec,
8da5adda9   Don Zickus   [PATCH] x86: Allo...
846
847
  	},
  	{
5211a242d   Kurt Garloff   x86: Add sysctl t...
848
849
850
851
  		.procname	= "panic_on_io_nmi",
  		.data		= &panic_on_io_nmi,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
852
  		.proc_handler	= proc_dointvec,
5211a242d   Kurt Garloff   x86: Add sysctl t...
853
  	},
55af77969   Mitsuo Hayasaka   x86: Panic on det...
854
855
856
857
858
859
860
861
862
  #ifdef CONFIG_DEBUG_STACKOVERFLOW
  	{
  		.procname	= "panic_on_stackoverflow",
  		.data		= &sysctl_panic_on_stackoverflow,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
  #endif
5211a242d   Kurt Garloff   x86: Add sysctl t...
863
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
864
865
866
867
  		.procname	= "bootloader_type",
  		.data		= &bootloader_type,
  		.maxlen		= sizeof (int),
  		.mode		= 0444,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
868
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
869
  	},
0741f4d20   Chuck Ebbert   [PATCH] x86: add ...
870
  	{
5031296c5   H. Peter Anvin   x86: add extensio...
871
872
873
874
  		.procname	= "bootloader_version",
  		.data		= &bootloader_version,
  		.maxlen		= sizeof (int),
  		.mode		= 0444,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
875
  		.proc_handler	= proc_dointvec,
5031296c5   H. Peter Anvin   x86: add extensio...
876
877
  	},
  	{
0741f4d20   Chuck Ebbert   [PATCH] x86: add ...
878
879
880
881
  		.procname	= "kstack_depth_to_print",
  		.data		= &kstack_depth_to_print,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
882
  		.proc_handler	= proc_dointvec,
0741f4d20   Chuck Ebbert   [PATCH] x86: add ...
883
  	},
6e7c40259   Ingo Molnar   x86: various chan...
884
  	{
6e7c40259   Ingo Molnar   x86: various chan...
885
886
887
888
  		.procname	= "io_delay_type",
  		.data		= &io_delay_type,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
889
  		.proc_handler	= proc_dointvec,
6e7c40259   Ingo Molnar   x86: various chan...
890
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
891
  #endif
7a9166e3b   Luke Yang   [PATCH] Fix undef...
892
  #if defined(CONFIG_MMU)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
893
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
894
895
896
897
  		.procname	= "randomize_va_space",
  		.data		= &randomize_va_space,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
898
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
899
  	},
7a9166e3b   Luke Yang   [PATCH] Fix undef...
900
  #endif
0152fb376   Martin Schwidefsky   [PATCH] s390: spi...
901
  #if defined(CONFIG_S390) && defined(CONFIG_SMP)
951f22d5b   Martin Schwidefsky   [PATCH] s390: spi...
902
  	{
951f22d5b   Martin Schwidefsky   [PATCH] s390: spi...
903
904
905
906
  		.procname	= "spin_retry",
  		.data		= &spin_retry,
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
907
  		.proc_handler	= proc_dointvec,
951f22d5b   Martin Schwidefsky   [PATCH] s390: spi...
908
909
  	},
  #endif
673d5b43d   Len Brown   ACPI: restore CON...
910
  #if	defined(CONFIG_ACPI_SLEEP) && defined(CONFIG_X86)
c255d844d   Pavel Machek   [PATCH] suspend-t...
911
  	{
c255d844d   Pavel Machek   [PATCH] suspend-t...
912
  		.procname	= "acpi_video_flags",
77afcf78a   Pavel Machek   PM: Integrate bee...
913
  		.data		= &acpi_realmode_flags,
c255d844d   Pavel Machek   [PATCH] suspend-t...
914
915
  		.maxlen		= sizeof (unsigned long),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
916
  		.proc_handler	= proc_doulongvec_minmax,
c255d844d   Pavel Machek   [PATCH] suspend-t...
917
918
  	},
  #endif
b6fca7253   Vineet Gupta   sysctl: Enable IA...
919
  #ifdef CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN
d2b176ed8   Jes Sorensen   [IA64] sysctl opt...
920
  	{
d2b176ed8   Jes Sorensen   [IA64] sysctl opt...
921
922
923
924
  		.procname	= "ignore-unaligned-usertrap",
  		.data		= &no_unaligned_warning,
  		.maxlen		= sizeof (int),
  	 	.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
925
  		.proc_handler	= proc_dointvec,
d2b176ed8   Jes Sorensen   [IA64] sysctl opt...
926
  	},
b6fca7253   Vineet Gupta   sysctl: Enable IA...
927
928
  #endif
  #ifdef CONFIG_IA64
88fc241f5   Doug Chapman   [IA64] dump stack...
929
  	{
88fc241f5   Doug Chapman   [IA64] dump stack...
930
931
932
933
  		.procname	= "unaligned-dump-stack",
  		.data		= &unaligned_dump_stack,
  		.maxlen		= sizeof (int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
934
  		.proc_handler	= proc_dointvec,
88fc241f5   Doug Chapman   [IA64] dump stack...
935
  	},
d2b176ed8   Jes Sorensen   [IA64] sysctl opt...
936
  #endif
e162b39a3   Mandeep Singh Baines   softlockup: decou...
937
938
  #ifdef CONFIG_DETECT_HUNG_TASK
  	{
e162b39a3   Mandeep Singh Baines   softlockup: decou...
939
940
941
942
  		.procname	= "hung_task_panic",
  		.data		= &sysctl_hung_task_panic,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
943
  		.proc_handler	= proc_dointvec_minmax,
e162b39a3   Mandeep Singh Baines   softlockup: decou...
944
945
946
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
82a1fcb90   Ingo Molnar   softlockup: autom...
947
  	{
82a1fcb90   Ingo Molnar   softlockup: autom...
948
949
  		.procname	= "hung_task_check_count",
  		.data		= &sysctl_hung_task_check_count,
90739081e   Ingo Molnar   softlockup: fix s...
950
  		.maxlen		= sizeof(unsigned long),
82a1fcb90   Ingo Molnar   softlockup: autom...
951
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
952
  		.proc_handler	= proc_doulongvec_minmax,
82a1fcb90   Ingo Molnar   softlockup: autom...
953
954
  	},
  	{
82a1fcb90   Ingo Molnar   softlockup: autom...
955
956
  		.procname	= "hung_task_timeout_secs",
  		.data		= &sysctl_hung_task_timeout_secs,
90739081e   Ingo Molnar   softlockup: fix s...
957
  		.maxlen		= sizeof(unsigned long),
82a1fcb90   Ingo Molnar   softlockup: autom...
958
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
959
  		.proc_handler	= proc_dohung_task_timeout_secs,
82a1fcb90   Ingo Molnar   softlockup: autom...
960
961
  	},
  	{
82a1fcb90   Ingo Molnar   softlockup: autom...
962
963
  		.procname	= "hung_task_warnings",
  		.data		= &sysctl_hung_task_warnings,
90739081e   Ingo Molnar   softlockup: fix s...
964
  		.maxlen		= sizeof(unsigned long),
82a1fcb90   Ingo Molnar   softlockup: autom...
965
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
966
  		.proc_handler	= proc_doulongvec_minmax,
82a1fcb90   Ingo Molnar   softlockup: autom...
967
  	},
c4f3b63fe   Ravikiran G Thirumalai   softlockup: add a...
968
  #endif
bebfa1013   Andi Kleen   [PATCH] x86_64: A...
969
970
  #ifdef CONFIG_COMPAT
  	{
bebfa1013   Andi Kleen   [PATCH] x86_64: A...
971
972
973
974
  		.procname	= "compat-log",
  		.data		= &compat_log,
  		.maxlen		= sizeof (int),
  	 	.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
975
  		.proc_handler	= proc_dointvec,
bebfa1013   Andi Kleen   [PATCH] x86_64: A...
976
977
  	},
  #endif
23f78d4a0   Ingo Molnar   [PATCH] pi-futex:...
978
979
  #ifdef CONFIG_RT_MUTEXES
  	{
23f78d4a0   Ingo Molnar   [PATCH] pi-futex:...
980
981
982
983
  		.procname	= "max_lock_depth",
  		.data		= &max_lock_depth,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
984
  		.proc_handler	= proc_dointvec,
23f78d4a0   Ingo Molnar   [PATCH] pi-futex:...
985
986
  	},
  #endif
10a0a8d4e   Jeremy Fitzhardinge   Add common orderl...
987
  	{
10a0a8d4e   Jeremy Fitzhardinge   Add common orderl...
988
989
990
991
  		.procname	= "poweroff_cmd",
  		.data		= &poweroff_cmd,
  		.maxlen		= POWEROFF_CMD_PATH_LEN,
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
992
  		.proc_handler	= proc_dostring,
10a0a8d4e   Jeremy Fitzhardinge   Add common orderl...
993
  	},
0b77f5bfb   David Howells   keys: make the ke...
994
995
  #ifdef CONFIG_KEYS
  	{
0b77f5bfb   David Howells   keys: make the ke...
996
997
998
999
1000
  		.procname	= "keys",
  		.mode		= 0555,
  		.child		= key_sysctls,
  	},
  #endif
31a72bce0   Paul E. McKenney   rcu: make rcutort...
1001
1002
  #ifdef CONFIG_RCU_TORTURE_TEST
  	{
31a72bce0   Paul E. McKenney   rcu: make rcutort...
1003
1004
1005
1006
  		.procname       = "rcutorture_runnable",
  		.data           = &rcutorture_runnable,
  		.maxlen         = sizeof(int),
  		.mode           = 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1007
  		.proc_handler	= proc_dointvec,
31a72bce0   Paul E. McKenney   rcu: make rcutort...
1008
1009
  	},
  #endif
cdd6c482c   Ingo Molnar   perf: Do the big ...
1010
  #ifdef CONFIG_PERF_EVENTS
aa4a22187   Vince Weaver   perf: Comment /pr...
1011
1012
1013
1014
1015
1016
  	/*
  	 * User-space scripts rely on the existence of this file
  	 * as a feature check for perf_events being enabled.
  	 *
  	 * So it's an ABI, do not remove!
  	 */
1ccd15497   Peter Zijlstra   perf_counter: sys...
1017
  	{
cdd6c482c   Ingo Molnar   perf: Do the big ...
1018
1019
1020
  		.procname	= "perf_event_paranoid",
  		.data		= &sysctl_perf_event_paranoid,
  		.maxlen		= sizeof(sysctl_perf_event_paranoid),
1ccd15497   Peter Zijlstra   perf_counter: sys...
1021
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1022
  		.proc_handler	= proc_dointvec,
1ccd15497   Peter Zijlstra   perf_counter: sys...
1023
  	},
c5078f78b   Peter Zijlstra   perf_counter: pro...
1024
  	{
cdd6c482c   Ingo Molnar   perf: Do the big ...
1025
1026
1027
  		.procname	= "perf_event_mlock_kb",
  		.data		= &sysctl_perf_event_mlock,
  		.maxlen		= sizeof(sysctl_perf_event_mlock),
c5078f78b   Peter Zijlstra   perf_counter: pro...
1028
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1029
  		.proc_handler	= proc_dointvec,
c5078f78b   Peter Zijlstra   perf_counter: pro...
1030
  	},
a78ac3258   Peter Zijlstra   perf_counter: Gen...
1031
  	{
cdd6c482c   Ingo Molnar   perf: Do the big ...
1032
1033
1034
  		.procname	= "perf_event_max_sample_rate",
  		.data		= &sysctl_perf_event_sample_rate,
  		.maxlen		= sizeof(sysctl_perf_event_sample_rate),
a78ac3258   Peter Zijlstra   perf_counter: Gen...
1035
  		.mode		= 0644,
163ec4354   Peter Zijlstra   perf: Optimize th...
1036
  		.proc_handler	= perf_proc_update_handler,
a78ac3258   Peter Zijlstra   perf_counter: Gen...
1037
  	},
14c63f17b   Dave Hansen   perf: Drop sample...
1038
1039
1040
1041
1042
1043
1044
1045
1046
  	{
  		.procname	= "perf_cpu_time_max_percent",
  		.data		= &sysctl_perf_cpu_time_max_percent,
  		.maxlen		= sizeof(sysctl_perf_cpu_time_max_percent),
  		.mode		= 0644,
  		.proc_handler	= perf_cpu_time_max_percent_handler,
  		.extra1		= &zero,
  		.extra2		= &one_hundred,
  	},
1ccd15497   Peter Zijlstra   perf_counter: sys...
1047
  #endif
dfec072ec   Vegard Nossum   kmemcheck: add th...
1048
1049
  #ifdef CONFIG_KMEMCHECK
  	{
dfec072ec   Vegard Nossum   kmemcheck: add th...
1050
1051
1052
1053
  		.procname	= "kmemcheck",
  		.data		= &kmemcheck_enabled,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1054
  		.proc_handler	= proc_dointvec,
dfec072ec   Vegard Nossum   kmemcheck: add th...
1055
1056
  	},
  #endif
cb684b5bc   Jens Axboe   block: fix linkag...
1057
  #ifdef CONFIG_BLOCK
5e605b64a   Jens Axboe   block: add blk-io...
1058
  	{
5e605b64a   Jens Axboe   block: add blk-io...
1059
1060
1061
1062
  		.procname	= "blk_iopoll",
  		.data		= &blk_iopoll_enabled,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1063
  		.proc_handler	= proc_dointvec,
5e605b64a   Jens Axboe   block: add blk-io...
1064
  	},
cb684b5bc   Jens Axboe   block: fix linkag...
1065
  #endif
6fce56ec9   Eric W. Biederman   sysctl: Remove re...
1066
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1067
  };
d8217f076   Eric W. Biederman   sysctl core: Stop...
1068
  static struct ctl_table vm_table[] = {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1069
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1070
1071
1072
1073
  		.procname	= "overcommit_memory",
  		.data		= &sysctl_overcommit_memory,
  		.maxlen		= sizeof(sysctl_overcommit_memory),
  		.mode		= 0644,
cb16e95fa   Petr Holasek   sysctl: add some ...
1074
1075
1076
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &zero,
  		.extra2		= &two,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1077
1078
  	},
  	{
fadd8fbd1   KAMEZAWA Hiroyuki   [PATCH] support f...
1079
1080
1081
1082
  		.procname	= "panic_on_oom",
  		.data		= &sysctl_panic_on_oom,
  		.maxlen		= sizeof(sysctl_panic_on_oom),
  		.mode		= 0644,
cb16e95fa   Petr Holasek   sysctl: add some ...
1083
1084
1085
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &zero,
  		.extra2		= &two,
fadd8fbd1   KAMEZAWA Hiroyuki   [PATCH] support f...
1086
1087
  	},
  	{
fe071d7e8   David Rientjes   oom: add oom_kill...
1088
1089
1090
1091
  		.procname	= "oom_kill_allocating_task",
  		.data		= &sysctl_oom_kill_allocating_task,
  		.maxlen		= sizeof(sysctl_oom_kill_allocating_task),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1092
  		.proc_handler	= proc_dointvec,
fe071d7e8   David Rientjes   oom: add oom_kill...
1093
1094
  	},
  	{
fef1bdd68   David Rientjes   oom: add sysctl t...
1095
1096
1097
1098
  		.procname	= "oom_dump_tasks",
  		.data		= &sysctl_oom_dump_tasks,
  		.maxlen		= sizeof(sysctl_oom_dump_tasks),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1099
  		.proc_handler	= proc_dointvec,
fef1bdd68   David Rientjes   oom: add sysctl t...
1100
1101
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1102
1103
1104
1105
  		.procname	= "overcommit_ratio",
  		.data		= &sysctl_overcommit_ratio,
  		.maxlen		= sizeof(sysctl_overcommit_ratio),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1106
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1107
1108
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1109
1110
1111
1112
  		.procname	= "page-cluster", 
  		.data		= &page_cluster,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
cb16e95fa   Petr Holasek   sysctl: add some ...
1113
1114
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &zero,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1115
1116
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1117
1118
1119
1120
  		.procname	= "dirty_background_ratio",
  		.data		= &dirty_background_ratio,
  		.maxlen		= sizeof(dirty_background_ratio),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1121
  		.proc_handler	= dirty_background_ratio_handler,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1122
1123
1124
1125
  		.extra1		= &zero,
  		.extra2		= &one_hundred,
  	},
  	{
2da02997e   David Rientjes   mm: add dirty_bac...
1126
1127
1128
1129
  		.procname	= "dirty_background_bytes",
  		.data		= &dirty_background_bytes,
  		.maxlen		= sizeof(dirty_background_bytes),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1130
  		.proc_handler	= dirty_background_bytes_handler,
fc3501d41   Sven Wegener   mm: fix dirty_byt...
1131
  		.extra1		= &one_ul,
2da02997e   David Rientjes   mm: add dirty_bac...
1132
1133
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1134
1135
1136
1137
  		.procname	= "dirty_ratio",
  		.data		= &vm_dirty_ratio,
  		.maxlen		= sizeof(vm_dirty_ratio),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1138
  		.proc_handler	= dirty_ratio_handler,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1139
1140
1141
1142
  		.extra1		= &zero,
  		.extra2		= &one_hundred,
  	},
  	{
2da02997e   David Rientjes   mm: add dirty_bac...
1143
1144
1145
1146
  		.procname	= "dirty_bytes",
  		.data		= &vm_dirty_bytes,
  		.maxlen		= sizeof(vm_dirty_bytes),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1147
  		.proc_handler	= dirty_bytes_handler,
9e4a5bda8   Andrea Righi   mm: prevent divid...
1148
  		.extra1		= &dirty_bytes_min,
2da02997e   David Rientjes   mm: add dirty_bac...
1149
1150
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1151
  		.procname	= "dirty_writeback_centisecs",
f6ef94381   Bart Samwel   [PATCH] Represent...
1152
1153
  		.data		= &dirty_writeback_interval,
  		.maxlen		= sizeof(dirty_writeback_interval),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1154
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1155
  		.proc_handler	= dirty_writeback_centisecs_handler,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1156
1157
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1158
  		.procname	= "dirty_expire_centisecs",
f6ef94381   Bart Samwel   [PATCH] Represent...
1159
1160
  		.data		= &dirty_expire_interval,
  		.maxlen		= sizeof(dirty_expire_interval),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1161
  		.mode		= 0644,
cb16e95fa   Petr Holasek   sysctl: add some ...
1162
1163
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &zero,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1164
1165
  	},
  	{
3965c9ae4   Wanpeng Li   mm: prepare for r...
1166
1167
1168
  		.procname       = "nr_pdflush_threads",
  		.mode           = 0444 /* read-only */,
  		.proc_handler   = pdflush_proc_obsolete,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1169
1170
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1171
1172
1173
1174
  		.procname	= "swappiness",
  		.data		= &vm_swappiness,
  		.maxlen		= sizeof(vm_swappiness),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1175
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1176
1177
1178
1179
  		.extra1		= &zero,
  		.extra2		= &one_hundred,
  	},
  #ifdef CONFIG_HUGETLB_PAGE
06808b082   Lee Schermerhorn   hugetlb: derive h...
1180
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1181
  		.procname	= "nr_hugepages",
e5ff21594   Andi Kleen   hugetlb: multiple...
1182
  		.data		= NULL,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1183
1184
  		.maxlen		= sizeof(unsigned long),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1185
  		.proc_handler	= hugetlb_sysctl_handler,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1186
1187
  		.extra1		= (void *)&hugetlb_zero,
  		.extra2		= (void *)&hugetlb_infinity,
06808b082   Lee Schermerhorn   hugetlb: derive h...
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
  	},
  #ifdef CONFIG_NUMA
  	{
  		.procname       = "nr_hugepages_mempolicy",
  		.data           = NULL,
  		.maxlen         = sizeof(unsigned long),
  		.mode           = 0644,
  		.proc_handler   = &hugetlb_mempolicy_sysctl_handler,
  		.extra1		= (void *)&hugetlb_zero,
  		.extra2		= (void *)&hugetlb_infinity,
  	},
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1200
  	 {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1201
1202
1203
1204
  		.procname	= "hugetlb_shm_group",
  		.data		= &sysctl_hugetlb_shm_group,
  		.maxlen		= sizeof(gid_t),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1205
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1206
  	 },
396faf030   Mel Gorman   Allow huge page a...
1207
  	 {
396faf030   Mel Gorman   Allow huge page a...
1208
1209
1210
1211
  		.procname	= "hugepages_treat_as_movable",
  		.data		= &hugepages_treat_as_movable,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1212
  		.proc_handler	= hugetlb_treat_movable_handler,
396faf030   Mel Gorman   Allow huge page a...
1213
  	},
54f9f80d6   Adam Litke   hugetlb: Add huge...
1214
  	{
d1c3fb1f8   Nishanth Aravamudan   hugetlb: introduc...
1215
  		.procname	= "nr_overcommit_hugepages",
e5ff21594   Andi Kleen   hugetlb: multiple...
1216
1217
  		.data		= NULL,
  		.maxlen		= sizeof(unsigned long),
d1c3fb1f8   Nishanth Aravamudan   hugetlb: introduc...
1218
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1219
  		.proc_handler	= hugetlb_overcommit_handler,
e5ff21594   Andi Kleen   hugetlb: multiple...
1220
1221
  		.extra1		= (void *)&hugetlb_zero,
  		.extra2		= (void *)&hugetlb_infinity,
d1c3fb1f8   Nishanth Aravamudan   hugetlb: introduc...
1222
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1223
1224
  #endif
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1225
1226
1227
1228
  		.procname	= "lowmem_reserve_ratio",
  		.data		= &sysctl_lowmem_reserve_ratio,
  		.maxlen		= sizeof(sysctl_lowmem_reserve_ratio),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1229
  		.proc_handler	= lowmem_reserve_ratio_sysctl_handler,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1230
1231
  	},
  	{
9d0243bca   Andrew Morton   [PATCH] drop-page...
1232
1233
1234
1235
1236
  		.procname	= "drop_caches",
  		.data		= &sysctl_drop_caches,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= drop_caches_sysctl_handler,
cb16e95fa   Petr Holasek   sysctl: add some ...
1237
1238
  		.extra1		= &one,
  		.extra2		= &three,
9d0243bca   Andrew Morton   [PATCH] drop-page...
1239
  	},
76ab0f530   Mel Gorman   mm: compaction: a...
1240
1241
1242
1243
1244
1245
1246
1247
  #ifdef CONFIG_COMPACTION
  	{
  		.procname	= "compact_memory",
  		.data		= &sysctl_compact_memory,
  		.maxlen		= sizeof(int),
  		.mode		= 0200,
  		.proc_handler	= sysctl_compaction_handler,
  	},
5e7719058   Mel Gorman   mm: compaction: a...
1248
1249
1250
1251
1252
1253
1254
1255
1256
  	{
  		.procname	= "extfrag_threshold",
  		.data		= &sysctl_extfrag_threshold,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= sysctl_extfrag_handler,
  		.extra1		= &min_extfrag_threshold,
  		.extra2		= &max_extfrag_threshold,
  	},
76ab0f530   Mel Gorman   mm: compaction: a...
1257
  #endif /* CONFIG_COMPACTION */
9d0243bca   Andrew Morton   [PATCH] drop-page...
1258
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1259
1260
1261
1262
  		.procname	= "min_free_kbytes",
  		.data		= &min_free_kbytes,
  		.maxlen		= sizeof(min_free_kbytes),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1263
  		.proc_handler	= min_free_kbytes_sysctl_handler,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1264
1265
  		.extra1		= &zero,
  	},
8ad4b1fb8   Rohit Seth   [PATCH] Make high...
1266
  	{
8ad4b1fb8   Rohit Seth   [PATCH] Make high...
1267
1268
1269
1270
  		.procname	= "percpu_pagelist_fraction",
  		.data		= &percpu_pagelist_fraction,
  		.maxlen		= sizeof(percpu_pagelist_fraction),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1271
  		.proc_handler	= percpu_pagelist_fraction_sysctl_handler,
8ad4b1fb8   Rohit Seth   [PATCH] Make high...
1272
1273
  		.extra1		= &min_percpu_pagelist_fract,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1274
1275
  #ifdef CONFIG_MMU
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1276
1277
1278
1279
  		.procname	= "max_map_count",
  		.data		= &sysctl_max_map_count,
  		.maxlen		= sizeof(sysctl_max_map_count),
  		.mode		= 0644,
3e26120cc   WANG Cong   kernel/sysctl.c: ...
1280
  		.proc_handler	= proc_dointvec_minmax,
70da2340f   Amerigo Wang   'sysctl_max_map_c...
1281
  		.extra1		= &zero,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1282
  	},
dd8632a12   Paul Mundt   NOMMU: Make mmap ...
1283
1284
  #else
  	{
dd8632a12   Paul Mundt   NOMMU: Make mmap ...
1285
1286
1287
1288
  		.procname	= "nr_trim_pages",
  		.data		= &sysctl_nr_trim_pages,
  		.maxlen		= sizeof(sysctl_nr_trim_pages),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1289
  		.proc_handler	= proc_dointvec_minmax,
dd8632a12   Paul Mundt   NOMMU: Make mmap ...
1290
1291
  		.extra1		= &zero,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1292
1293
  #endif
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1294
1295
1296
1297
  		.procname	= "laptop_mode",
  		.data		= &laptop_mode,
  		.maxlen		= sizeof(laptop_mode),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1298
  		.proc_handler	= proc_dointvec_jiffies,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1299
1300
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1301
1302
1303
1304
  		.procname	= "block_dump",
  		.data		= &block_dump,
  		.maxlen		= sizeof(block_dump),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1305
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1306
1307
1308
  		.extra1		= &zero,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1309
1310
1311
1312
  		.procname	= "vfs_cache_pressure",
  		.data		= &sysctl_vfs_cache_pressure,
  		.maxlen		= sizeof(sysctl_vfs_cache_pressure),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1313
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1314
1315
1316
1317
  		.extra1		= &zero,
  	},
  #ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1318
1319
1320
1321
  		.procname	= "legacy_va_layout",
  		.data		= &sysctl_legacy_va_layout,
  		.maxlen		= sizeof(sysctl_legacy_va_layout),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1322
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1323
1324
1325
  		.extra1		= &zero,
  	},
  #endif
1743660b9   Christoph Lameter   [PATCH] Zone recl...
1326
1327
  #ifdef CONFIG_NUMA
  	{
1743660b9   Christoph Lameter   [PATCH] Zone recl...
1328
1329
1330
1331
  		.procname	= "zone_reclaim_mode",
  		.data		= &zone_reclaim_mode,
  		.maxlen		= sizeof(zone_reclaim_mode),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1332
  		.proc_handler	= proc_dointvec,
c84db23c6   Christoph Lameter   [PATCH] zone_recl...
1333
  		.extra1		= &zero,
1743660b9   Christoph Lameter   [PATCH] Zone recl...
1334
  	},
9614634fe   Christoph Lameter   [PATCH] ZVC/zone_...
1335
  	{
9614634fe   Christoph Lameter   [PATCH] ZVC/zone_...
1336
1337
1338
1339
  		.procname	= "min_unmapped_ratio",
  		.data		= &sysctl_min_unmapped_ratio,
  		.maxlen		= sizeof(sysctl_min_unmapped_ratio),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1340
  		.proc_handler	= sysctl_min_unmapped_ratio_sysctl_handler,
9614634fe   Christoph Lameter   [PATCH] ZVC/zone_...
1341
1342
1343
  		.extra1		= &zero,
  		.extra2		= &one_hundred,
  	},
0ff38490c   Christoph Lameter   [PATCH] zone_recl...
1344
  	{
0ff38490c   Christoph Lameter   [PATCH] zone_recl...
1345
1346
1347
1348
  		.procname	= "min_slab_ratio",
  		.data		= &sysctl_min_slab_ratio,
  		.maxlen		= sizeof(sysctl_min_slab_ratio),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1349
  		.proc_handler	= sysctl_min_slab_ratio_sysctl_handler,
0ff38490c   Christoph Lameter   [PATCH] zone_recl...
1350
1351
1352
  		.extra1		= &zero,
  		.extra2		= &one_hundred,
  	},
1743660b9   Christoph Lameter   [PATCH] Zone recl...
1353
  #endif
77461ab33   Christoph Lameter   Make vm statistic...
1354
1355
  #ifdef CONFIG_SMP
  	{
77461ab33   Christoph Lameter   Make vm statistic...
1356
1357
1358
1359
  		.procname	= "stat_interval",
  		.data		= &sysctl_stat_interval,
  		.maxlen		= sizeof(sysctl_stat_interval),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1360
  		.proc_handler	= proc_dointvec_jiffies,
77461ab33   Christoph Lameter   Make vm statistic...
1361
1362
  	},
  #endif
6e1415467   David Howells   NOMMU: Optimise a...
1363
  #ifdef CONFIG_MMU
ed0321895   Eric Paris   security: Protect...
1364
  	{
ed0321895   Eric Paris   security: Protect...
1365
  		.procname	= "mmap_min_addr",
788084aba   Eric Paris   Security/SELinux:...
1366
1367
  		.data		= &dac_mmap_min_addr,
  		.maxlen		= sizeof(unsigned long),
ed0321895   Eric Paris   security: Protect...
1368
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1369
  		.proc_handler	= mmap_min_addr_handler,
ed0321895   Eric Paris   security: Protect...
1370
  	},
6e1415467   David Howells   NOMMU: Optimise a...
1371
  #endif
f0c0b2b80   KAMEZAWA Hiroyuki   change zonelist o...
1372
1373
  #ifdef CONFIG_NUMA
  	{
f0c0b2b80   KAMEZAWA Hiroyuki   change zonelist o...
1374
1375
1376
1377
  		.procname	= "numa_zonelist_order",
  		.data		= &numa_zonelist_order,
  		.maxlen		= NUMA_ZONELIST_ORDER_LEN,
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1378
  		.proc_handler	= numa_zonelist_order_handler,
f0c0b2b80   KAMEZAWA Hiroyuki   change zonelist o...
1379
1380
  	},
  #endif
2b8232ce5   Al Viro   minimal build fix...
1381
  #if (defined(CONFIG_X86_32) && !defined(CONFIG_UML))|| \
5c36e6578   Paul Mundt   sysctl: Support v...
1382
     (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL))
e6e5494cb   Ingo Molnar   [PATCH] vdso: ran...
1383
  	{
e6e5494cb   Ingo Molnar   [PATCH] vdso: ran...
1384
1385
1386
1387
  		.procname	= "vdso_enabled",
  		.data		= &vdso_enabled,
  		.maxlen		= sizeof(vdso_enabled),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1388
  		.proc_handler	= proc_dointvec,
e6e5494cb   Ingo Molnar   [PATCH] vdso: ran...
1389
1390
1391
  		.extra1		= &zero,
  	},
  #endif
195cf453d   Bron Gondwana   mm/page-writeback...
1392
1393
  #ifdef CONFIG_HIGHMEM
  	{
195cf453d   Bron Gondwana   mm/page-writeback...
1394
1395
1396
1397
  		.procname	= "highmem_is_dirtyable",
  		.data		= &vm_highmem_is_dirtyable,
  		.maxlen		= sizeof(vm_highmem_is_dirtyable),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1398
  		.proc_handler	= proc_dointvec_minmax,
195cf453d   Bron Gondwana   mm/page-writeback...
1399
1400
1401
1402
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
  #endif
4be6f6bb6   Peter Zijlstra   mm: move the scan...
1403
  	{
4be6f6bb6   Peter Zijlstra   mm: move the scan...
1404
1405
1406
1407
  		.procname	= "scan_unevictable_pages",
  		.data		= &scan_unevictable_pages,
  		.maxlen		= sizeof(scan_unevictable_pages),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1408
  		.proc_handler	= scan_unevictable_handler,
4be6f6bb6   Peter Zijlstra   mm: move the scan...
1409
  	},
6a46079cf   Andi Kleen   HWPOISON: The hig...
1410
1411
  #ifdef CONFIG_MEMORY_FAILURE
  	{
6a46079cf   Andi Kleen   HWPOISON: The hig...
1412
1413
1414
1415
  		.procname	= "memory_failure_early_kill",
  		.data		= &sysctl_memory_failure_early_kill,
  		.maxlen		= sizeof(sysctl_memory_failure_early_kill),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1416
  		.proc_handler	= proc_dointvec_minmax,
6a46079cf   Andi Kleen   HWPOISON: The hig...
1417
1418
1419
1420
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
  	{
6a46079cf   Andi Kleen   HWPOISON: The hig...
1421
1422
1423
1424
  		.procname	= "memory_failure_recovery",
  		.data		= &sysctl_memory_failure_recovery,
  		.maxlen		= sizeof(sysctl_memory_failure_recovery),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1425
  		.proc_handler	= proc_dointvec_minmax,
6a46079cf   Andi Kleen   HWPOISON: The hig...
1426
1427
1428
1429
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
  #endif
c9b1d0981   Andrew Shewmaker   mm: limit growth ...
1430
1431
1432
1433
1434
1435
1436
  	{
  		.procname	= "user_reserve_kbytes",
  		.data		= &sysctl_user_reserve_kbytes,
  		.maxlen		= sizeof(sysctl_user_reserve_kbytes),
  		.mode		= 0644,
  		.proc_handler	= proc_doulongvec_minmax,
  	},
4eeab4f55   Andrew Shewmaker   mm: replace hardc...
1437
1438
1439
1440
1441
1442
1443
  	{
  		.procname	= "admin_reserve_kbytes",
  		.data		= &sysctl_admin_reserve_kbytes,
  		.maxlen		= sizeof(sysctl_admin_reserve_kbytes),
  		.mode		= 0644,
  		.proc_handler	= proc_doulongvec_minmax,
  	},
6fce56ec9   Eric W. Biederman   sysctl: Remove re...
1444
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1445
  };
2abc26fc6   Eric W. Biederman   [PATCH] sysctl: c...
1446
  #if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE)
d8217f076   Eric W. Biederman   sysctl core: Stop...
1447
  static struct ctl_table binfmt_misc_table[] = {
6fce56ec9   Eric W. Biederman   sysctl: Remove re...
1448
  	{ }
2abc26fc6   Eric W. Biederman   [PATCH] sysctl: c...
1449
1450
  };
  #endif
d8217f076   Eric W. Biederman   sysctl core: Stop...
1451
  static struct ctl_table fs_table[] = {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1452
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1453
1454
1455
1456
  		.procname	= "inode-nr",
  		.data		= &inodes_stat,
  		.maxlen		= 2*sizeof(int),
  		.mode		= 0444,
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
1457
  		.proc_handler	= proc_nr_inodes,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1458
1459
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1460
1461
1462
1463
  		.procname	= "inode-state",
  		.data		= &inodes_stat,
  		.maxlen		= 7*sizeof(int),
  		.mode		= 0444,
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
1464
  		.proc_handler	= proc_nr_inodes,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1465
1466
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1467
1468
  		.procname	= "file-nr",
  		.data		= &files_stat,
518de9b39   Eric Dumazet   fs: allow for mor...
1469
  		.maxlen		= sizeof(files_stat),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1470
  		.mode		= 0444,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1471
  		.proc_handler	= proc_nr_files,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1472
1473
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1474
1475
  		.procname	= "file-max",
  		.data		= &files_stat.max_files,
518de9b39   Eric Dumazet   fs: allow for mor...
1476
  		.maxlen		= sizeof(files_stat.max_files),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1477
  		.mode		= 0644,
518de9b39   Eric Dumazet   fs: allow for mor...
1478
  		.proc_handler	= proc_doulongvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1479
1480
  	},
  	{
9cfe015aa   Eric Dumazet   get rid of NR_OPE...
1481
1482
1483
1484
  		.procname	= "nr_open",
  		.data		= &sysctl_nr_open,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1485
  		.proc_handler	= proc_dointvec_minmax,
eceea0b3d   Al Viro   [PATCH] avoid mul...
1486
1487
  		.extra1		= &sysctl_nr_open_min,
  		.extra2		= &sysctl_nr_open_max,
9cfe015aa   Eric Dumazet   get rid of NR_OPE...
1488
1489
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1490
1491
1492
1493
  		.procname	= "dentry-state",
  		.data		= &dentry_stat,
  		.maxlen		= 6*sizeof(int),
  		.mode		= 0444,
312d3ca85   Christoph Hellwig   fs: use percpu co...
1494
  		.proc_handler	= proc_nr_dentry,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1495
1496
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1497
1498
1499
1500
  		.procname	= "overflowuid",
  		.data		= &fs_overflowuid,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1501
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1502
1503
1504
1505
  		.extra1		= &minolduid,
  		.extra2		= &maxolduid,
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1506
1507
1508
1509
  		.procname	= "overflowgid",
  		.data		= &fs_overflowgid,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1510
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1511
1512
1513
  		.extra1		= &minolduid,
  		.extra2		= &maxolduid,
  	},
bfcd17a6c   Thomas Petazzoni   Configure out fil...
1514
  #ifdef CONFIG_FILE_LOCKING
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1515
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1516
1517
1518
1519
  		.procname	= "leases-enable",
  		.data		= &leases_enable,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1520
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1521
  	},
bfcd17a6c   Thomas Petazzoni   Configure out fil...
1522
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1523
1524
  #ifdef CONFIG_DNOTIFY
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1525
1526
1527
1528
  		.procname	= "dir-notify-enable",
  		.data		= &dir_notify_enable,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1529
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1530
1531
1532
  	},
  #endif
  #ifdef CONFIG_MMU
bfcd17a6c   Thomas Petazzoni   Configure out fil...
1533
  #ifdef CONFIG_FILE_LOCKING
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1534
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1535
1536
1537
1538
  		.procname	= "lease-break-time",
  		.data		= &lease_break_time,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1539
  		.proc_handler	= proc_dointvec,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1540
  	},
bfcd17a6c   Thomas Petazzoni   Configure out fil...
1541
  #endif
ebf3f09c6   Thomas Petazzoni   Configure out AIO...
1542
  #ifdef CONFIG_AIO
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1543
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1544
1545
1546
1547
  		.procname	= "aio-nr",
  		.data		= &aio_nr,
  		.maxlen		= sizeof(aio_nr),
  		.mode		= 0444,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1548
  		.proc_handler	= proc_doulongvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1549
1550
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1551
1552
1553
1554
  		.procname	= "aio-max-nr",
  		.data		= &aio_max_nr,
  		.maxlen		= sizeof(aio_max_nr),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
1555
  		.proc_handler	= proc_doulongvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1556
  	},
ebf3f09c6   Thomas Petazzoni   Configure out AIO...
1557
  #endif /* CONFIG_AIO */
2d9048e20   Amy Griffis   [PATCH] inotify (...
1558
  #ifdef CONFIG_INOTIFY_USER
0399cb08c   Robert Love   [PATCH] inotify: ...
1559
  	{
0399cb08c   Robert Love   [PATCH] inotify: ...
1560
1561
1562
1563
1564
  		.procname	= "inotify",
  		.mode		= 0555,
  		.child		= inotify_table,
  	},
  #endif	
7ef9964e6   Davide Libenzi   epoll: introduce ...
1565
1566
1567
1568
1569
1570
1571
  #ifdef CONFIG_EPOLL
  	{
  		.procname	= "epoll",
  		.mode		= 0555,
  		.child		= epoll_table,
  	},
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1572
  #endif
d6e711448   Alan Cox   [PATCH] setuid co...
1573
  	{
800179c9b   Kees Cook   fs: add link rest...
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
  		.procname	= "protected_symlinks",
  		.data		= &sysctl_protected_symlinks,
  		.maxlen		= sizeof(int),
  		.mode		= 0600,
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
  	{
  		.procname	= "protected_hardlinks",
  		.data		= &sysctl_protected_hardlinks,
  		.maxlen		= sizeof(int),
  		.mode		= 0600,
  		.proc_handler	= proc_dointvec_minmax,
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
  	{
d6e711448   Alan Cox   [PATCH] setuid co...
1592
1593
1594
1595
  		.procname	= "suid_dumpable",
  		.data		= &suid_dumpable,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
54b501992   Kees Cook   coredump: warn ab...
1596
  		.proc_handler	= proc_dointvec_minmax_coredump,
8e654fba4   Matthew Wilcox   sysctl: fix suid_...
1597
1598
  		.extra1		= &zero,
  		.extra2		= &two,
d6e711448   Alan Cox   [PATCH] setuid co...
1599
  	},
2abc26fc6   Eric W. Biederman   [PATCH] sysctl: c...
1600
1601
  #if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE)
  	{
2abc26fc6   Eric W. Biederman   [PATCH] sysctl: c...
1602
1603
1604
1605
1606
  		.procname	= "binfmt_misc",
  		.mode		= 0555,
  		.child		= binfmt_misc_table,
  	},
  #endif
b492e95be   Jens Axboe   pipe: set lower a...
1607
  	{
ff9da691c   Jens Axboe   pipe: change /pro...
1608
1609
  		.procname	= "pipe-max-size",
  		.data		= &pipe_max_size,
b492e95be   Jens Axboe   pipe: set lower a...
1610
1611
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
ff9da691c   Jens Axboe   pipe: change /pro...
1612
1613
  		.proc_handler	= &pipe_proc_fn,
  		.extra1		= &pipe_min_size,
b492e95be   Jens Axboe   pipe: set lower a...
1614
  	},
6fce56ec9   Eric W. Biederman   sysctl: Remove re...
1615
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1616
  };
d8217f076   Eric W. Biederman   sysctl core: Stop...
1617
  static struct ctl_table debug_table[] = {
7ac57a89d   Catalin Marinas   Kconfig: clean up...
1618
  #ifdef CONFIG_SYSCTL_EXCEPTION_TRACE
abd4f7505   Masoud Asgharifard Sharbiani   x86: i386-show-un...
1619
  	{
abd4f7505   Masoud Asgharifard Sharbiani   x86: i386-show-un...
1620
1621
1622
1623
1624
1625
1626
  		.procname	= "exception-trace",
  		.data		= &show_unhandled_signals,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec
  	},
  #endif
b2be84df9   Masami Hiramatsu   kprobes: Jump opt...
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
  #if defined(CONFIG_OPTPROBES)
  	{
  		.procname	= "kprobes-optimization",
  		.data		= &sysctl_kprobes_optimization,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
  		.proc_handler	= proc_kprobes_optimization_handler,
  		.extra1		= &zero,
  		.extra2		= &one,
  	},
  #endif
6fce56ec9   Eric W. Biederman   sysctl: Remove re...
1638
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1639
  };
d8217f076   Eric W. Biederman   sysctl core: Stop...
1640
  static struct ctl_table dev_table[] = {
6fce56ec9   Eric W. Biederman   sysctl: Remove re...
1641
  	{ }
0eeca2830   Robert Love   [PATCH] inotify
1642
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1643

de4e83bd6   Eric W. Biederman   sysctl: Register ...
1644
  int __init sysctl_init(void)
d912b0cc1   Eric W. Biederman   [PATCH] sysctl: a...
1645
  {
fd4b616b0   Steven Rostedt   sysctl: suppress ...
1646
1647
1648
1649
  	struct ctl_table_header *hdr;
  
  	hdr = register_sysctl_table(sysctl_base_table);
  	kmemleak_not_leak(hdr);
d912b0cc1   Eric W. Biederman   [PATCH] sysctl: a...
1650
1651
  	return 0;
  }
b89a81712   Eric W. Biederman   [PATCH] sysctl: A...
1652
  #endif /* CONFIG_SYSCTL */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1653
1654
1655
  /*
   * /proc/sys support
   */
b89a81712   Eric W. Biederman   [PATCH] sysctl: A...
1656
  #ifdef CONFIG_PROC_SYSCTL
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1657

b1ba4ddde   Adrian Bunk   [PATCH] make kern...
1658
  static int _proc_do_string(void* data, int maxlen, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1659
  			   void __user *buffer,
b1ba4ddde   Adrian Bunk   [PATCH] make kern...
1660
  			   size_t *lenp, loff_t *ppos)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1661
1662
1663
1664
  {
  	size_t len;
  	char __user *p;
  	char c;
8d0608771   Oleg Nesterov   [PATCH] _proc_do_...
1665
1666
  
  	if (!data || !maxlen || !*lenp) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1667
1668
1669
  		*lenp = 0;
  		return 0;
  	}
8d0608771   Oleg Nesterov   [PATCH] _proc_do_...
1670

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
  	if (write) {
  		len = 0;
  		p = buffer;
  		while (len < *lenp) {
  			if (get_user(c, p++))
  				return -EFAULT;
  			if (c == 0 || c == '
  ')
  				break;
  			len++;
  		}
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1682
1683
1684
  		if (len >= maxlen)
  			len = maxlen-1;
  		if(copy_from_user(data, buffer, len))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1685
  			return -EFAULT;
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1686
  		((char *) data)[len] = 0;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1687
1688
  		*ppos += *lenp;
  	} else {
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1689
1690
1691
  		len = strlen(data);
  		if (len > maxlen)
  			len = maxlen;
8d0608771   Oleg Nesterov   [PATCH] _proc_do_...
1692
1693
1694
1695
1696
1697
1698
1699
  
  		if (*ppos > len) {
  			*lenp = 0;
  			return 0;
  		}
  
  		data += *ppos;
  		len  -= *ppos;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1700
1701
1702
  		if (len > *lenp)
  			len = *lenp;
  		if (len)
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1703
  			if(copy_to_user(buffer, data, len))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
  				return -EFAULT;
  		if (len < *lenp) {
  			if(put_user('
  ', ((char __user *) buffer) + len))
  				return -EFAULT;
  			len++;
  		}
  		*lenp = len;
  		*ppos += len;
  	}
  	return 0;
  }
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1716
1717
1718
1719
  /**
   * proc_dostring - read a string sysctl
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
   * @ppos: file position
   *
   * Reads/writes a string from/to the user buffer. If the kernel
   * buffer provided is not large enough to hold the string, the
   * string is truncated. The copied string is %NULL-terminated.
   * If the string is being read by the user process, it is copied
   * and a newline '
  ' is added. It is truncated if the buffer is
   * not large enough.
   *
   * Returns 0 on success.
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1734
  int proc_dostring(struct ctl_table *table, int write,
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1735
1736
  		  void __user *buffer, size_t *lenp, loff_t *ppos)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1737
  	return _proc_do_string(table->data, table->maxlen, write,
f5dd3d6fa   Sam Vilain   [PATCH] proc: sys...
1738
1739
  			       buffer, lenp, ppos);
  }
00b7c3395   Amerigo Wang   sysctl: refactor ...
1740
1741
1742
1743
1744
1745
1746
1747
  static size_t proc_skip_spaces(char **buf)
  {
  	size_t ret;
  	char *tmp = skip_spaces(*buf);
  	ret = tmp - *buf;
  	*buf = tmp;
  	return ret;
  }
9f977fb7a   Octavian Purdila   sysctl: add proc_...
1748
1749
1750
1751
1752
1753
1754
1755
1756
  static void proc_skip_char(char **buf, size_t *size, const char v)
  {
  	while (*size) {
  		if (**buf != v)
  			break;
  		(*size)--;
  		(*buf)++;
  	}
  }
00b7c3395   Amerigo Wang   sysctl: refactor ...
1757
1758
  #define TMPBUFLEN 22
  /**
0fc377bd6   Randy Dunlap   sysctl: fix kerne...
1759
   * proc_get_long - reads an ASCII formatted integer from a user buffer
00b7c3395   Amerigo Wang   sysctl: refactor ...
1760
   *
0fc377bd6   Randy Dunlap   sysctl: fix kerne...
1761
1762
1763
1764
1765
1766
1767
   * @buf: a kernel buffer
   * @size: size of the kernel buffer
   * @val: this is where the number will be stored
   * @neg: set to %TRUE if number is negative
   * @perm_tr: a vector which contains the allowed trailers
   * @perm_tr_len: size of the perm_tr vector
   * @tr: pointer to store the trailer character
00b7c3395   Amerigo Wang   sysctl: refactor ...
1768
   *
0fc377bd6   Randy Dunlap   sysctl: fix kerne...
1769
1770
1771
1772
   * In case of success %0 is returned and @buf and @size are updated with
   * the amount of bytes read. If @tr is non-NULL and a trailing
   * character exists (size is non-zero after returning from this
   * function), @tr is updated with the trailing character.
00b7c3395   Amerigo Wang   sysctl: refactor ...
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
   */
  static int proc_get_long(char **buf, size_t *size,
  			  unsigned long *val, bool *neg,
  			  const char *perm_tr, unsigned perm_tr_len, char *tr)
  {
  	int len;
  	char *p, tmp[TMPBUFLEN];
  
  	if (!*size)
  		return -EINVAL;
  
  	len = *size;
  	if (len > TMPBUFLEN - 1)
  		len = TMPBUFLEN - 1;
  
  	memcpy(tmp, *buf, len);
  
  	tmp[len] = 0;
  	p = tmp;
  	if (*p == '-' && *size > 1) {
  		*neg = true;
  		p++;
  	} else
  		*neg = false;
  	if (!isdigit(*p))
  		return -EINVAL;
  
  	*val = simple_strtoul(p, &p, 0);
  
  	len = p - tmp;
  
  	/* We don't know if the next char is whitespace thus we may accept
  	 * invalid integers (e.g. 1234...a) or two integers instead of one
  	 * (e.g. 123...1). So lets not allow such large numbers. */
  	if (len == TMPBUFLEN - 1)
  		return -EINVAL;
  
  	if (len < *size && perm_tr_len && !memchr(perm_tr, *p, perm_tr_len))
  		return -EINVAL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1812

00b7c3395   Amerigo Wang   sysctl: refactor ...
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
  	if (tr && (len < *size))
  		*tr = *p;
  
  	*buf += len;
  	*size -= len;
  
  	return 0;
  }
  
  /**
0fc377bd6   Randy Dunlap   sysctl: fix kerne...
1823
   * proc_put_long - converts an integer to a decimal ASCII formatted string
00b7c3395   Amerigo Wang   sysctl: refactor ...
1824
   *
0fc377bd6   Randy Dunlap   sysctl: fix kerne...
1825
1826
1827
1828
   * @buf: the user buffer
   * @size: the size of the user buffer
   * @val: the integer to be converted
   * @neg: sign of the number, %TRUE for negative
00b7c3395   Amerigo Wang   sysctl: refactor ...
1829
   *
0fc377bd6   Randy Dunlap   sysctl: fix kerne...
1830
1831
   * In case of success %0 is returned and @buf and @size are updated with
   * the amount of bytes written.
00b7c3395   Amerigo Wang   sysctl: refactor ...
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
   */
  static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
  			  bool neg)
  {
  	int len;
  	char tmp[TMPBUFLEN], *p = tmp;
  
  	sprintf(p, "%s%lu", neg ? "-" : "", val);
  	len = strlen(tmp);
  	if (len > *size)
  		len = *size;
  	if (copy_to_user(*buf, tmp, len))
  		return -EFAULT;
  	*size -= len;
  	*buf += len;
  	return 0;
  }
  #undef TMPBUFLEN
  
  static int proc_put_char(void __user **buf, size_t *size, char c)
  {
  	if (*size) {
  		char __user **buffer = (char __user **)buf;
  		if (put_user(c, *buffer))
  			return -EFAULT;
  		(*size)--, (*buffer)++;
  		*buf = *buffer;
  	}
  	return 0;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1862

00b7c3395   Amerigo Wang   sysctl: refactor ...
1863
  static int do_proc_dointvec_conv(bool *negp, unsigned long *lvalp,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1864
1865
1866
1867
1868
1869
1870
1871
  				 int *valp,
  				 int write, void *data)
  {
  	if (write) {
  		*valp = *negp ? -*lvalp : *lvalp;
  	} else {
  		int val = *valp;
  		if (val < 0) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
1872
  			*negp = true;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1873
1874
  			*lvalp = (unsigned long)-val;
  		} else {
00b7c3395   Amerigo Wang   sysctl: refactor ...
1875
  			*negp = false;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1876
1877
1878
1879
1880
  			*lvalp = (unsigned long)val;
  		}
  	}
  	return 0;
  }
00b7c3395   Amerigo Wang   sysctl: refactor ...
1881
1882
  static const char proc_wspace_sep[] = { ' ', '\t', '
  ' };
d8217f076   Eric W. Biederman   sysctl core: Stop...
1883
  static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1884
  		  int write, void __user *buffer,
fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
1885
  		  size_t *lenp, loff_t *ppos,
00b7c3395   Amerigo Wang   sysctl: refactor ...
1886
  		  int (*conv)(bool *negp, unsigned long *lvalp, int *valp,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1887
1888
1889
  			      int write, void *data),
  		  void *data)
  {
00b7c3395   Amerigo Wang   sysctl: refactor ...
1890
1891
1892
1893
  	int *i, vleft, first = 1, err = 0;
  	unsigned long page = 0;
  	size_t left;
  	char *kbuf;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1894
  	
00b7c3395   Amerigo Wang   sysctl: refactor ...
1895
  	if (!tbl_data || !table->maxlen || !*lenp || (*ppos && !write)) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1896
1897
1898
1899
  		*lenp = 0;
  		return 0;
  	}
  	
fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
1900
  	i = (int *) tbl_data;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1901
1902
1903
1904
1905
  	vleft = table->maxlen / sizeof(*i);
  	left = *lenp;
  
  	if (!conv)
  		conv = do_proc_dointvec_conv;
00b7c3395   Amerigo Wang   sysctl: refactor ...
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
  	if (write) {
  		if (left > PAGE_SIZE - 1)
  			left = PAGE_SIZE - 1;
  		page = __get_free_page(GFP_TEMPORARY);
  		kbuf = (char *) page;
  		if (!kbuf)
  			return -ENOMEM;
  		if (copy_from_user(kbuf, buffer, left)) {
  			err = -EFAULT;
  			goto free;
  		}
  		kbuf[left] = 0;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1919
  	for (; left && vleft--; i++, first=0) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
1920
1921
  		unsigned long lval;
  		bool neg;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1922

00b7c3395   Amerigo Wang   sysctl: refactor ...
1923
1924
  		if (write) {
  			left -= proc_skip_spaces(&kbuf);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1925

563b04671   J. R. Okajima   proc_dointvec: wr...
1926
1927
  			if (!left)
  				break;
00b7c3395   Amerigo Wang   sysctl: refactor ...
1928
1929
1930
1931
  			err = proc_get_long(&kbuf, &left, &lval, &neg,
  					     proc_wspace_sep,
  					     sizeof(proc_wspace_sep), NULL);
  			if (err)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1932
  				break;
00b7c3395   Amerigo Wang   sysctl: refactor ...
1933
1934
  			if (conv(&neg, &lval, i, 1, data)) {
  				err = -EINVAL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1935
  				break;
00b7c3395   Amerigo Wang   sysctl: refactor ...
1936
  			}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1937
  		} else {
00b7c3395   Amerigo Wang   sysctl: refactor ...
1938
1939
1940
1941
  			if (conv(&neg, &lval, i, 0, data)) {
  				err = -EINVAL;
  				break;
  			}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1942
  			if (!first)
00b7c3395   Amerigo Wang   sysctl: refactor ...
1943
1944
1945
1946
1947
  				err = proc_put_char(&buffer, &left, '\t');
  			if (err)
  				break;
  			err = proc_put_long(&buffer, &left, lval, neg);
  			if (err)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1948
  				break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1949
1950
  		}
  	}
00b7c3395   Amerigo Wang   sysctl: refactor ...
1951
1952
1953
  	if (!write && !first && left && !err)
  		err = proc_put_char(&buffer, &left, '
  ');
563b04671   J. R. Okajima   proc_dointvec: wr...
1954
  	if (write && !err && left)
00b7c3395   Amerigo Wang   sysctl: refactor ...
1955
1956
  		left -= proc_skip_spaces(&kbuf);
  free:
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1957
  	if (write) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
1958
1959
1960
  		free_page(page);
  		if (first)
  			return err ? : -EINVAL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1961
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1962
1963
  	*lenp -= left;
  	*ppos += *lenp;
00b7c3395   Amerigo Wang   sysctl: refactor ...
1964
  	return err;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1965
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1966
  static int do_proc_dointvec(struct ctl_table *table, int write,
fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
1967
  		  void __user *buffer, size_t *lenp, loff_t *ppos,
00b7c3395   Amerigo Wang   sysctl: refactor ...
1968
  		  int (*conv)(bool *negp, unsigned long *lvalp, int *valp,
fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
1969
1970
1971
  			      int write, void *data),
  		  void *data)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1972
  	return __do_proc_dointvec(table->data, table, write,
fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
1973
1974
  			buffer, lenp, ppos, conv, data);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1975
1976
1977
1978
  /**
   * proc_dointvec - read a vector of integers
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1979
1980
1981
1982
1983
1984
1985
1986
1987
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
   * @ppos: file position
   *
   * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
   * values from/to the user buffer, treated as an ASCII string. 
   *
   * Returns 0 on success.
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1988
  int proc_dointvec(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1989
1990
  		     void __user *buffer, size_t *lenp, loff_t *ppos)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1991
      return do_proc_dointvec(table,write,buffer,lenp,ppos,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1992
1993
  		    	    NULL,NULL);
  }
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
1994
  /*
25ddbb18a   Andi Kleen   Make the taint fl...
1995
1996
   * Taint values can only be increased
   * This means we can safely use a temporary.
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
1997
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
1998
  static int proc_taint(struct ctl_table *table, int write,
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
1999
2000
  			       void __user *buffer, size_t *lenp, loff_t *ppos)
  {
25ddbb18a   Andi Kleen   Make the taint fl...
2001
2002
2003
  	struct ctl_table t;
  	unsigned long tmptaint = get_taint();
  	int err;
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
2004

91fcd412e   Bastian Blank   Allow reading tai...
2005
  	if (write && !capable(CAP_SYS_ADMIN))
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
2006
  		return -EPERM;
25ddbb18a   Andi Kleen   Make the taint fl...
2007
2008
  	t = *table;
  	t.data = &tmptaint;
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2009
  	err = proc_doulongvec_minmax(&t, write, buffer, lenp, ppos);
25ddbb18a   Andi Kleen   Make the taint fl...
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
  	if (err < 0)
  		return err;
  
  	if (write) {
  		/*
  		 * Poor man's atomic or. Not worth adding a primitive
  		 * to everyone's atomic.h for this
  		 */
  		int i;
  		for (i = 0; i < BITS_PER_LONG && tmptaint >> i; i++) {
  			if ((tmptaint >> i) & 1)
373d4d099   Rusty Russell   taint: add explic...
2021
  				add_taint(i, LOCKDEP_STILL_OK);
25ddbb18a   Andi Kleen   Make the taint fl...
2022
2023
2024
2025
  		}
  	}
  
  	return err;
34f5a3989   Theodore Ts'o   [PATCH] Add TAINT...
2026
  }
bfdc0b497   Richard Weinberger   sysctl: restrict ...
2027
  #ifdef CONFIG_PRINTK
620f6e8e8   Kees Cook   sysctl: fix write...
2028
  static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
bfdc0b497   Richard Weinberger   sysctl: restrict ...
2029
2030
2031
2032
2033
2034
2035
2036
  				void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	if (write && !capable(CAP_SYS_ADMIN))
  		return -EPERM;
  
  	return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
  }
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2037
2038
2039
2040
  struct do_proc_dointvec_minmax_conv_param {
  	int *min;
  	int *max;
  };
00b7c3395   Amerigo Wang   sysctl: refactor ...
2041
2042
  static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
  					int *valp,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
  					int write, void *data)
  {
  	struct do_proc_dointvec_minmax_conv_param *param = data;
  	if (write) {
  		int val = *negp ? -*lvalp : *lvalp;
  		if ((param->min && *param->min > val) ||
  		    (param->max && *param->max < val))
  			return -EINVAL;
  		*valp = val;
  	} else {
  		int val = *valp;
  		if (val < 0) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2055
  			*negp = true;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2056
2057
  			*lvalp = (unsigned long)-val;
  		} else {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2058
  			*negp = false;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
  			*lvalp = (unsigned long)val;
  		}
  	}
  	return 0;
  }
  
  /**
   * proc_dointvec_minmax - read a vector of integers with min/max values
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
   * @ppos: file position
   *
   * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
   * values from/to the user buffer, treated as an ASCII string.
   *
   * This routine will ensure the values are within the range specified by
   * table->extra1 (min) and table->extra2 (max).
   *
   * Returns 0 on success.
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2081
  int proc_dointvec_minmax(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2082
2083
2084
2085
2086
2087
  		  void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	struct do_proc_dointvec_minmax_conv_param param = {
  		.min = (int *) table->extra1,
  		.max = (int *) table->extra2,
  	};
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2088
  	return do_proc_dointvec(table, write, buffer, lenp, ppos,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2089
2090
  				do_proc_dointvec_minmax_conv, &param);
  }
54b501992   Kees Cook   coredump: warn ab...
2091
2092
  static void validate_coredump_safety(void)
  {
046d662f4   Alex Kelly   coredump: make co...
2093
  #ifdef CONFIG_COREDUMP
e579d2c25   Kees Cook   coredump: remove ...
2094
  	if (suid_dumpable == SUID_DUMP_ROOT &&
54b501992   Kees Cook   coredump: warn ab...
2095
2096
2097
2098
2099
2100
  	    core_pattern[0] != '/' && core_pattern[0] != '|') {
  		printk(KERN_WARNING "Unsafe core_pattern used with "\
  			"suid_dumpable=2. Pipe handler or fully qualified "\
  			"core dump path required.
  ");
  	}
046d662f4   Alex Kelly   coredump: make co...
2101
  #endif
54b501992   Kees Cook   coredump: warn ab...
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
  }
  
  static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
  		void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	int error = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
  	if (!error)
  		validate_coredump_safety();
  	return error;
  }
046d662f4   Alex Kelly   coredump: make co...
2112
  #ifdef CONFIG_COREDUMP
54b501992   Kees Cook   coredump: warn ab...
2113
2114
2115
2116
2117
2118
2119
2120
  static int proc_dostring_coredump(struct ctl_table *table, int write,
  		  void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	int error = proc_dostring(table, write, buffer, lenp, ppos);
  	if (!error)
  		validate_coredump_safety();
  	return error;
  }
046d662f4   Alex Kelly   coredump: make co...
2121
  #endif
54b501992   Kees Cook   coredump: warn ab...
2122

d8217f076   Eric W. Biederman   sysctl core: Stop...
2123
  static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2124
2125
2126
2127
2128
  				     void __user *buffer,
  				     size_t *lenp, loff_t *ppos,
  				     unsigned long convmul,
  				     unsigned long convdiv)
  {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2129
2130
2131
2132
2133
2134
2135
  	unsigned long *i, *min, *max;
  	int vleft, first = 1, err = 0;
  	unsigned long page = 0;
  	size_t left;
  	char *kbuf;
  
  	if (!data || !table->maxlen || !*lenp || (*ppos && !write)) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2136
2137
2138
  		*lenp = 0;
  		return 0;
  	}
00b7c3395   Amerigo Wang   sysctl: refactor ...
2139

fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
2140
  	i = (unsigned long *) data;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2141
2142
2143
2144
  	min = (unsigned long *) table->extra1;
  	max = (unsigned long *) table->extra2;
  	vleft = table->maxlen / sizeof(unsigned long);
  	left = *lenp;
00b7c3395   Amerigo Wang   sysctl: refactor ...
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
  
  	if (write) {
  		if (left > PAGE_SIZE - 1)
  			left = PAGE_SIZE - 1;
  		page = __get_free_page(GFP_TEMPORARY);
  		kbuf = (char *) page;
  		if (!kbuf)
  			return -ENOMEM;
  		if (copy_from_user(kbuf, buffer, left)) {
  			err = -EFAULT;
  			goto free;
  		}
  		kbuf[left] = 0;
  	}
27b3d80a7   Eric Dumazet   sysctl: fix min/m...
2159
  	for (; left && vleft--; i++, first = 0) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2160
  		unsigned long val;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2161
  		if (write) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2162
2163
2164
2165
2166
2167
2168
2169
  			bool neg;
  
  			left -= proc_skip_spaces(&kbuf);
  
  			err = proc_get_long(&kbuf, &left, &val, &neg,
  					     proc_wspace_sep,
  					     sizeof(proc_wspace_sep), NULL);
  			if (err)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2170
2171
  				break;
  			if (neg)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2172
2173
2174
2175
2176
  				continue;
  			if ((min && val < *min) || (max && val > *max))
  				continue;
  			*i = val;
  		} else {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2177
  			val = convdiv * (*i) / convmul;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2178
  			if (!first)
00b7c3395   Amerigo Wang   sysctl: refactor ...
2179
2180
2181
2182
  				err = proc_put_char(&buffer, &left, '\t');
  			err = proc_put_long(&buffer, &left, val, false);
  			if (err)
  				break;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2183
2184
  		}
  	}
00b7c3395   Amerigo Wang   sysctl: refactor ...
2185
2186
2187
2188
2189
2190
  	if (!write && !first && left && !err)
  		err = proc_put_char(&buffer, &left, '
  ');
  	if (write && !err)
  		left -= proc_skip_spaces(&kbuf);
  free:
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2191
  	if (write) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2192
2193
2194
  		free_page(page);
  		if (first)
  			return err ? : -EINVAL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2195
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2196
2197
  	*lenp -= left;
  	*ppos += *lenp;
00b7c3395   Amerigo Wang   sysctl: refactor ...
2198
  	return err;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2199
  }
d8217f076   Eric W. Biederman   sysctl core: Stop...
2200
  static int do_proc_doulongvec_minmax(struct ctl_table *table, int write,
fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
2201
2202
2203
2204
2205
2206
  				     void __user *buffer,
  				     size_t *lenp, loff_t *ppos,
  				     unsigned long convmul,
  				     unsigned long convdiv)
  {
  	return __do_proc_doulongvec_minmax(table->data, table, write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2207
  			buffer, lenp, ppos, convmul, convdiv);
fcfbd547b   Kirill Korotaev   [PATCH] IPC names...
2208
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2209
2210
2211
2212
  /**
   * proc_doulongvec_minmax - read a vector of long integers with min/max values
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
   * @ppos: file position
   *
   * Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long
   * values from/to the user buffer, treated as an ASCII string.
   *
   * This routine will ensure the values are within the range specified by
   * table->extra1 (min) and table->extra2 (max).
   *
   * Returns 0 on success.
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2225
  int proc_doulongvec_minmax(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2226
2227
  			   void __user *buffer, size_t *lenp, loff_t *ppos)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2228
      return do_proc_doulongvec_minmax(table, write, buffer, lenp, ppos, 1l, 1l);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2229
2230
2231
2232
2233
2234
  }
  
  /**
   * proc_doulongvec_ms_jiffies_minmax - read a vector of millisecond values with min/max values
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
   * @ppos: file position
   *
   * Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long
   * values from/to the user buffer, treated as an ASCII string. The values
   * are treated as milliseconds, and converted to jiffies when they are stored.
   *
   * This routine will ensure the values are within the range specified by
   * table->extra1 (min) and table->extra2 (max).
   *
   * Returns 0 on success.
   */
d8217f076   Eric W. Biederman   sysctl core: Stop...
2248
  int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2249
2250
2251
  				      void __user *buffer,
  				      size_t *lenp, loff_t *ppos)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2252
      return do_proc_doulongvec_minmax(table, write, buffer,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2253
2254
  				     lenp, ppos, HZ, 1000l);
  }
00b7c3395   Amerigo Wang   sysctl: refactor ...
2255
  static int do_proc_dointvec_jiffies_conv(bool *negp, unsigned long *lvalp,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2256
2257
2258
2259
  					 int *valp,
  					 int write, void *data)
  {
  	if (write) {
cba9f33d1   Bart Samwel   [PATCH] Range che...
2260
2261
  		if (*lvalp > LONG_MAX / HZ)
  			return 1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2262
2263
2264
2265
2266
  		*valp = *negp ? -(*lvalp*HZ) : (*lvalp*HZ);
  	} else {
  		int val = *valp;
  		unsigned long lval;
  		if (val < 0) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2267
  			*negp = true;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2268
2269
  			lval = (unsigned long)-val;
  		} else {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2270
  			*negp = false;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2271
2272
2273
2274
2275
2276
  			lval = (unsigned long)val;
  		}
  		*lvalp = lval / HZ;
  	}
  	return 0;
  }
00b7c3395   Amerigo Wang   sysctl: refactor ...
2277
  static int do_proc_dointvec_userhz_jiffies_conv(bool *negp, unsigned long *lvalp,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2278
2279
2280
2281
  						int *valp,
  						int write, void *data)
  {
  	if (write) {
cba9f33d1   Bart Samwel   [PATCH] Range che...
2282
2283
  		if (USER_HZ < HZ && *lvalp > (LONG_MAX / HZ) * USER_HZ)
  			return 1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2284
2285
2286
2287
2288
  		*valp = clock_t_to_jiffies(*negp ? -*lvalp : *lvalp);
  	} else {
  		int val = *valp;
  		unsigned long lval;
  		if (val < 0) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2289
  			*negp = true;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2290
2291
  			lval = (unsigned long)-val;
  		} else {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2292
  			*negp = false;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2293
2294
2295
2296
2297
2298
  			lval = (unsigned long)val;
  		}
  		*lvalp = jiffies_to_clock_t(lval);
  	}
  	return 0;
  }
00b7c3395   Amerigo Wang   sysctl: refactor ...
2299
  static int do_proc_dointvec_ms_jiffies_conv(bool *negp, unsigned long *lvalp,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2300
2301
2302
2303
  					    int *valp,
  					    int write, void *data)
  {
  	if (write) {
d738ce8fd   Francesco Fusco   sysctl: range che...
2304
2305
2306
2307
2308
  		unsigned long jif = msecs_to_jiffies(*negp ? -*lvalp : *lvalp);
  
  		if (jif > INT_MAX)
  			return 1;
  		*valp = (int)jif;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2309
2310
2311
2312
  	} else {
  		int val = *valp;
  		unsigned long lval;
  		if (val < 0) {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2313
  			*negp = true;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2314
2315
  			lval = (unsigned long)-val;
  		} else {
00b7c3395   Amerigo Wang   sysctl: refactor ...
2316
  			*negp = false;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
  			lval = (unsigned long)val;
  		}
  		*lvalp = jiffies_to_msecs(lval);
  	}
  	return 0;
  }
  
  /**
   * proc_dointvec_jiffies - read a vector of integers as seconds
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
   * @ppos: file position
   *
   * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
   * values from/to the user buffer, treated as an ASCII string. 
   * The values read are assumed to be in seconds, and are converted into
   * jiffies.
   *
   * Returns 0 on success.
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2339
  int proc_dointvec_jiffies(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2340
2341
  			  void __user *buffer, size_t *lenp, loff_t *ppos)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2342
      return do_proc_dointvec(table,write,buffer,lenp,ppos,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2343
2344
2345
2346
2347
2348
2349
  		    	    do_proc_dointvec_jiffies_conv,NULL);
  }
  
  /**
   * proc_dointvec_userhz_jiffies - read a vector of integers as 1/USER_HZ seconds
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2350
2351
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
1e5d53314   Randy Dunlap   [PATCH] more kern...
2352
   * @ppos: pointer to the file position
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2353
2354
2355
2356
2357
2358
2359
2360
   *
   * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
   * values from/to the user buffer, treated as an ASCII string. 
   * The values read are assumed to be in 1/USER_HZ seconds, and 
   * are converted into jiffies.
   *
   * Returns 0 on success.
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2361
  int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2362
2363
  				 void __user *buffer, size_t *lenp, loff_t *ppos)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2364
      return do_proc_dointvec(table,write,buffer,lenp,ppos,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2365
2366
2367
2368
2369
2370
2371
  		    	    do_proc_dointvec_userhz_jiffies_conv,NULL);
  }
  
  /**
   * proc_dointvec_ms_jiffies - read a vector of integers as 1 milliseconds
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2372
2373
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
67be2dd1b   Martin Waitz   [PATCH] DocBook: ...
2374
2375
   * @ppos: file position
   * @ppos: the current position in the file
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2376
2377
2378
2379
2380
2381
2382
2383
   *
   * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
   * values from/to the user buffer, treated as an ASCII string. 
   * The values read are assumed to be in 1/1000 seconds, and 
   * are converted into jiffies.
   *
   * Returns 0 on success.
   */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2384
  int proc_dointvec_ms_jiffies(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2385
2386
  			     void __user *buffer, size_t *lenp, loff_t *ppos)
  {
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2387
  	return do_proc_dointvec(table, write, buffer, lenp, ppos,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2388
2389
  				do_proc_dointvec_ms_jiffies_conv, NULL);
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2390
  static int proc_do_cad_pid(struct ctl_table *table, int write,
9ec52099e   Cedric Le Goater   [PATCH] replace c...
2391
2392
2393
2394
2395
  			   void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	struct pid *new_pid;
  	pid_t tmp;
  	int r;
6c5f3e7b4   Pavel Emelyanov   Pidns: make full ...
2396
  	tmp = pid_vnr(cad_pid);
9ec52099e   Cedric Le Goater   [PATCH] replace c...
2397

8d65af789   Alexey Dobriyan   sysctl: remove "s...
2398
  	r = __do_proc_dointvec(&tmp, table, write, buffer,
9ec52099e   Cedric Le Goater   [PATCH] replace c...
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
  			       lenp, ppos, NULL, NULL);
  	if (r || !write)
  		return r;
  
  	new_pid = find_get_pid(tmp);
  	if (!new_pid)
  		return -ESRCH;
  
  	put_pid(xchg(&cad_pid, new_pid));
  	return 0;
  }
9f977fb7a   Octavian Purdila   sysctl: add proc_...
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
  /**
   * proc_do_large_bitmap - read/write from/to a large bitmap
   * @table: the sysctl table
   * @write: %TRUE if this is a write to the sysctl file
   * @buffer: the user buffer
   * @lenp: the size of the user buffer
   * @ppos: file position
   *
   * The bitmap is stored at table->data and the bitmap length (in bits)
   * in table->maxlen.
   *
   * We use a range comma separated format (e.g. 1,3-4,10-10) so that
   * large bitmaps may be represented in a compact manner. Writing into
   * the file will clear the bitmap then update it with the given input.
   *
   * Returns 0 on success.
   */
  int proc_do_large_bitmap(struct ctl_table *table, int write,
  			 void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	int err = 0;
  	bool first = 1;
  	size_t left = *lenp;
  	unsigned long bitmap_len = table->maxlen;
  	unsigned long *bitmap = (unsigned long *) table->data;
  	unsigned long *tmp_bitmap = NULL;
  	char tr_a[] = { '-', ',', '
  ' }, tr_b[] = { ',', '
  ', 0 }, c;
  
  	if (!bitmap_len || !left || (*ppos && !write)) {
  		*lenp = 0;
  		return 0;
  	}
  
  	if (write) {
  		unsigned long page = 0;
  		char *kbuf;
  
  		if (left > PAGE_SIZE - 1)
  			left = PAGE_SIZE - 1;
  
  		page = __get_free_page(GFP_TEMPORARY);
  		kbuf = (char *) page;
  		if (!kbuf)
  			return -ENOMEM;
  		if (copy_from_user(kbuf, buffer, left)) {
  			free_page(page);
  			return -EFAULT;
                  }
  		kbuf[left] = 0;
  
  		tmp_bitmap = kzalloc(BITS_TO_LONGS(bitmap_len) * sizeof(unsigned long),
  				     GFP_KERNEL);
  		if (!tmp_bitmap) {
  			free_page(page);
  			return -ENOMEM;
  		}
  		proc_skip_char(&kbuf, &left, '
  ');
  		while (!err && left) {
  			unsigned long val_a, val_b;
  			bool neg;
  
  			err = proc_get_long(&kbuf, &left, &val_a, &neg, tr_a,
  					     sizeof(tr_a), &c);
  			if (err)
  				break;
  			if (val_a >= bitmap_len || neg) {
  				err = -EINVAL;
  				break;
  			}
  
  			val_b = val_a;
  			if (left) {
  				kbuf++;
  				left--;
  			}
  
  			if (c == '-') {
  				err = proc_get_long(&kbuf, &left, &val_b,
  						     &neg, tr_b, sizeof(tr_b),
  						     &c);
  				if (err)
  					break;
  				if (val_b >= bitmap_len || neg ||
  				    val_a > val_b) {
  					err = -EINVAL;
  					break;
  				}
  				if (left) {
  					kbuf++;
  					left--;
  				}
  			}
5a04cca6c   Akinobu Mita   sysctl: use bitma...
2505
  			bitmap_set(tmp_bitmap, val_a, val_b - val_a + 1);
9f977fb7a   Octavian Purdila   sysctl: add proc_...
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
  			first = 0;
  			proc_skip_char(&kbuf, &left, '
  ');
  		}
  		free_page(page);
  	} else {
  		unsigned long bit_a, bit_b = 0;
  
  		while (left) {
  			bit_a = find_next_bit(bitmap, bitmap_len, bit_b);
  			if (bit_a >= bitmap_len)
  				break;
  			bit_b = find_next_zero_bit(bitmap, bitmap_len,
  						   bit_a + 1) - 1;
  
  			if (!first) {
  				err = proc_put_char(&buffer, &left, ',');
  				if (err)
  					break;
  			}
  			err = proc_put_long(&buffer, &left, bit_a, false);
  			if (err)
  				break;
  			if (bit_a != bit_b) {
  				err = proc_put_char(&buffer, &left, '-');
  				if (err)
  					break;
  				err = proc_put_long(&buffer, &left, bit_b, false);
  				if (err)
  					break;
  			}
  
  			first = 0; bit_b++;
  		}
  		if (!err)
  			err = proc_put_char(&buffer, &left, '
  ');
  	}
  
  	if (!err) {
  		if (write) {
  			if (*ppos)
  				bitmap_or(bitmap, bitmap, tmp_bitmap, bitmap_len);
  			else
5a04cca6c   Akinobu Mita   sysctl: use bitma...
2550
  				bitmap_copy(bitmap, tmp_bitmap, bitmap_len);
9f977fb7a   Octavian Purdila   sysctl: add proc_...
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
  		}
  		kfree(tmp_bitmap);
  		*lenp -= left;
  		*ppos += *lenp;
  		return 0;
  	} else {
  		kfree(tmp_bitmap);
  		return err;
  	}
  }
556105000   Jovi Zhang   sysctl: fix #ifde...
2561
  #else /* CONFIG_PROC_SYSCTL */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2562

8d65af789   Alexey Dobriyan   sysctl: remove "s...
2563
  int proc_dostring(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2564
2565
2566
2567
  		  void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	return -ENOSYS;
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2568
  int proc_dointvec(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2569
  		  void __user *buffer, size_t *lenp, loff_t *ppos)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2570
2571
2572
  {
  	return -ENOSYS;
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2573
  int proc_dointvec_minmax(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2574
2575
2576
2577
  		    void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	return -ENOSYS;
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2578
  int proc_dointvec_jiffies(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2579
2580
2581
2582
  		    void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	return -ENOSYS;
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2583
  int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2584
2585
2586
2587
  		    void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	return -ENOSYS;
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2588
  int proc_dointvec_ms_jiffies(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2589
2590
2591
2592
  			     void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	return -ENOSYS;
  }
8d65af789   Alexey Dobriyan   sysctl: remove "s...
2593
  int proc_doulongvec_minmax(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2594
2595
2596
2597
  		    void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	return -ENOSYS;
  }
d8217f076   Eric W. Biederman   sysctl core: Stop...
2598
  int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2599
2600
2601
2602
2603
  				      void __user *buffer,
  				      size_t *lenp, loff_t *ppos)
  {
      return -ENOSYS;
  }
556105000   Jovi Zhang   sysctl: fix #ifde...
2604
  #endif /* CONFIG_PROC_SYSCTL */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2605

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
  /*
   * No sense putting this after each symbol definition, twice,
   * exception granted :-)
   */
  EXPORT_SYMBOL(proc_dointvec);
  EXPORT_SYMBOL(proc_dointvec_jiffies);
  EXPORT_SYMBOL(proc_dointvec_minmax);
  EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
  EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
  EXPORT_SYMBOL(proc_dostring);
  EXPORT_SYMBOL(proc_doulongvec_minmax);
  EXPORT_SYMBOL(proc_doulongvec_ms_jiffies_minmax);