diff options
Diffstat (limited to 'kernel/sysctl.c')
| -rw-r--r-- | kernel/sysctl.c | 723 | 
1 files changed, 49 insertions, 674 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index d7ed1dffa426..5ae443b2882e 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -20,7 +20,6 @@   */  #include <linux/module.h> -#include <linux/aio.h>  #include <linux/mm.h>  #include <linux/swap.h>  #include <linux/slab.h> @@ -50,7 +49,6 @@  #include <linux/times.h>  #include <linux/limits.h>  #include <linux/dcache.h> -#include <linux/dnotify.h>  #include <linux/syscalls.h>  #include <linux/vmstat.h>  #include <linux/nfs_fs.h> @@ -58,19 +56,15 @@  #include <linux/reboot.h>  #include <linux/ftrace.h>  #include <linux/perf_event.h> -#include <linux/kprobes.h> -#include <linux/pipe_fs_i.h>  #include <linux/oom.h>  #include <linux/kmod.h>  #include <linux/capability.h>  #include <linux/binfmts.h>  #include <linux/sched/sysctl.h> -#include <linux/sched/coredump.h>  #include <linux/kexec.h>  #include <linux/bpf.h>  #include <linux/mount.h>  #include <linux/userfaultfd_k.h> -#include <linux/coredump.h>  #include <linux/latencytop.h>  #include <linux/pid.h>  #include <linux/delayacct.h> @@ -97,64 +91,21 @@  #if defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_LOCK_STAT)  #include <linux/lockdep.h>  #endif -#ifdef CONFIG_CHR_DEV_SG -#include <scsi/sg.h> -#endif -#ifdef CONFIG_STACKLEAK_RUNTIME_DISABLE -#include <linux/stackleak.h> -#endif -#ifdef CONFIG_LOCKUP_DETECTOR -#include <linux/nmi.h> -#endif  #if defined(CONFIG_SYSCTL)  /* Constants used for minimum and  maximum */ -#ifdef CONFIG_LOCKUP_DETECTOR -static int sixty = 60; -#endif - -static int __maybe_unused neg_one = -1; -static int __maybe_unused two = 2; -static int __maybe_unused four = 4; -static unsigned long zero_ul; -static unsigned long one_ul = 1; -static unsigned long long_max = LONG_MAX; -static int one_hundred = 100; -static int two_hundred = 200; -static int one_thousand = 1000; -#ifdef CONFIG_PRINTK -static int ten_thousand = 10000; -#endif +  #ifdef CONFIG_PERF_EVENTS -static int six_hundred_forty_kb = 640 * 1024; +static const int six_hundred_forty_kb = 640 * 1024;  #endif  /* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */ -static unsigned long dirty_bytes_min = 2 * PAGE_SIZE; - -/* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ -static int maxolduid = 65535; -static int minolduid; +static const unsigned long dirty_bytes_min = 2 * PAGE_SIZE; -static int ngroups_max = NGROUPS_MAX; +static const int ngroups_max = NGROUPS_MAX;  static const int cap_last_cap = CAP_LAST_CAP; -/* - * This is needed for proc_doulongvec_minmax of sysctl_hung_task_timeout_secs - * and hung_task_check_interval_secs - */ -#ifdef CONFIG_DETECT_HUNG_TASK -static unsigned long hung_task_timeout_max = (LONG_MAX/HZ); -#endif - -#ifdef CONFIG_INOTIFY_USER -#include <linux/inotify.h> -#endif -#ifdef CONFIG_FANOTIFY -#include <linux/fanotify.h> -#endif -  #ifdef CONFIG_PROC_SYSCTL  /** @@ -191,8 +142,8 @@ int sysctl_legacy_va_layout;  #endif  #ifdef CONFIG_COMPACTION -static int min_extfrag_threshold; -static int max_extfrag_threshold = 1000; +/* min_extfrag_threshold is SYSCTL_ZERO */; +static const int max_extfrag_threshold = 1000;  #endif  #endif /* CONFIG_SYSCTL */ @@ -803,12 +754,12 @@ static int __do_proc_douintvec(void *tbl_data, struct ctl_table *table,  	return do_proc_douintvec_r(i, buffer, lenp, ppos, conv, data);  } -static int do_proc_douintvec(struct ctl_table *table, int write, -			     void *buffer, size_t *lenp, loff_t *ppos, -			     int (*conv)(unsigned long *lvalp, -					 unsigned int *valp, -					 int write, void *data), -			     void *data) +int do_proc_douintvec(struct ctl_table *table, int write, +		      void *buffer, size_t *lenp, loff_t *ppos, +		      int (*conv)(unsigned long *lvalp, +				  unsigned int *valp, +				  int write, void *data), +		      void *data)  {  	return __do_proc_douintvec(table->data, table, write,  				   buffer, lenp, ppos, conv, data); @@ -937,17 +888,6 @@ static int proc_taint(struct ctl_table *table, int write,  	return err;  } -#ifdef CONFIG_PRINTK -static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, -				void *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 -  /**   * struct do_proc_dointvec_minmax_conv_param - proc_dointvec_minmax() range checking structure   * @min: pointer to minimum allowable value @@ -1143,67 +1083,6 @@ int proc_dou8vec_minmax(struct ctl_table *table, int write,  }  EXPORT_SYMBOL_GPL(proc_dou8vec_minmax); -static int do_proc_dopipe_max_size_conv(unsigned long *lvalp, -					unsigned int *valp, -					int write, void *data) -{ -	if (write) { -		unsigned int val; - -		val = round_pipe_size(*lvalp); -		if (val == 0) -			return -EINVAL; - -		*valp = val; -	} else { -		unsigned int val = *valp; -		*lvalp = (unsigned long) val; -	} - -	return 0; -} - -static int proc_dopipe_max_size(struct ctl_table *table, int write, -				void *buffer, size_t *lenp, loff_t *ppos) -{ -	return do_proc_douintvec(table, write, buffer, lenp, ppos, -				 do_proc_dopipe_max_size_conv, NULL); -} - -static void validate_coredump_safety(void) -{ -#ifdef CONFIG_COREDUMP -	if (suid_dumpable == SUID_DUMP_ROOT && -	    core_pattern[0] != '/' && core_pattern[0] != '|') { -		printk(KERN_WARNING -"Unsafe core_pattern used with fs.suid_dumpable=2.\n" -"Pipe handler or fully qualified core dump path required.\n" -"Set kernel.core_pattern before fs.suid_dumpable.\n" -		); -	} -#endif -} - -static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write, -		void *buffer, size_t *lenp, loff_t *ppos) -{ -	int error = proc_dointvec_minmax(table, write, buffer, lenp, ppos); -	if (!error) -		validate_coredump_safety(); -	return error; -} - -#ifdef CONFIG_COREDUMP -static int proc_dostring_coredump(struct ctl_table *table, int write, -		  void *buffer, size_t *lenp, loff_t *ppos) -{ -	int error = proc_dostring(table, write, buffer, lenp, ppos); -	if (!error) -		validate_coredump_safety(); -	return error; -} -#endif -  #ifdef CONFIG_MAGIC_SYSRQ  static int sysrq_sysctl_handler(struct ctl_table *table, int write,  				void *buffer, size_t *lenp, loff_t *ppos) @@ -1266,10 +1145,11 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table,  			err = proc_get_long(&p, &left, &val, &neg,  					     proc_wspace_sep,  					     sizeof(proc_wspace_sep), NULL); -			if (err) +			if (err || neg) { +				err = -EINVAL;  				break; -			if (neg) -				continue; +			} +  			val = convmul * val / convdiv;  			if ((min && val < *min) || (max && val > *max)) {  				err = -EINVAL; @@ -1927,29 +1807,6 @@ static struct ctl_table kern_table[] = {  		.mode		= 0644,  		.proc_handler	= proc_dointvec,  	}, -#ifdef CONFIG_COREDUMP -	{ -		.procname	= "core_uses_pid", -		.data		= &core_uses_pid, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec, -	}, -	{ -		.procname	= "core_pattern", -		.data		= core_pattern, -		.maxlen		= CORENAME_MAX_SIZE, -		.mode		= 0644, -		.proc_handler	= proc_dostring_coredump, -	}, -	{ -		.procname	= "core_pipe_limit", -		.data		= &core_pipe_limit, -		.maxlen		= sizeof(unsigned int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec, -	}, -#endif  #ifdef CONFIG_PROC_SYSCTL  	{  		.procname	= "tainted", @@ -1963,7 +1820,7 @@ static struct ctl_table kern_table[] = {  		.maxlen		= sizeof(int),  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &neg_one, +		.extra1		= SYSCTL_NEG_ONE,  		.extra2		= SYSCTL_ONE,  	},  #endif @@ -2130,15 +1987,6 @@ static struct ctl_table kern_table[] = {  		.proc_handler	= proc_dostring,  	},  #endif -#ifdef CONFIG_CHR_DEV_SG -	{ -		.procname	= "sg-big-buff", -		.data		= &sg_big_buff, -		.maxlen		= sizeof (int), -		.mode		= 0444, -		.proc_handler	= proc_dointvec, -	}, -#endif  #ifdef CONFIG_BSD_PROCESS_ACCT  	{  		.procname	= "acct", @@ -2174,30 +2022,18 @@ static struct ctl_table kern_table[] = {  		.proc_handler	= sysctl_max_threads,  	},  	{ -		.procname	= "random", -		.mode		= 0555, -		.child		= random_table, -	}, -	{  		.procname	= "usermodehelper",  		.mode		= 0555,  		.child		= usermodehelper_table,  	}, -#ifdef CONFIG_FW_LOADER_USER_HELPER -	{ -		.procname	= "firmware_config", -		.mode		= 0555, -		.child		= firmware_config_table, -	}, -#endif  	{  		.procname	= "overflowuid",  		.data		= &overflowuid,  		.maxlen		= sizeof(int),  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &minolduid, -		.extra2		= &maxolduid, +		.extra1		= SYSCTL_ZERO, +		.extra2		= SYSCTL_MAXOLDUID,  	},  	{  		.procname	= "overflowgid", @@ -2205,8 +2041,8 @@ static struct ctl_table kern_table[] = {  		.maxlen		= sizeof(int),  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &minolduid, -		.extra2		= &maxolduid, +		.extra1		= SYSCTL_ZERO, +		.extra2		= SYSCTL_MAXOLDUID,  	},  #ifdef CONFIG_S390  	{ @@ -2251,66 +2087,9 @@ static struct ctl_table kern_table[] = {  		.mode		= 0644,  		.proc_handler	= proc_doulongvec_minmax,  	}, -#if defined CONFIG_PRINTK -	{ -		.procname	= "printk", -		.data		= &console_loglevel, -		.maxlen		= 4*sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec, -	}, -	{ -		.procname	= "printk_ratelimit", -		.data		= &printk_ratelimit_state.interval, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_jiffies, -	}, -	{ -		.procname	= "printk_ratelimit_burst", -		.data		= &printk_ratelimit_state.burst, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec, -	}, -	{ -		.procname	= "printk_delay", -		.data		= &printk_delay_msec, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= &ten_thousand, -	}, -	{ -		.procname	= "printk_devkmsg", -		.data		= devkmsg_log_str, -		.maxlen		= DEVKMSG_STR_MAX_SIZE, -		.mode		= 0644, -		.proc_handler	= devkmsg_sysctl_set_loglvl, -	}, -	{ -		.procname	= "dmesg_restrict", -		.data		= &dmesg_restrict, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax_sysadmin, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -	{ -		.procname	= "kptr_restrict", -		.data		= &kptr_restrict, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax_sysadmin, -		.extra1		= SYSCTL_ZERO, -		.extra2		= &two, -	}, -#endif  	{  		.procname	= "ngroups_max", -		.data		= &ngroups_max, +		.data		= (void *)&ngroups_max,  		.maxlen		= sizeof (int),  		.mode		= 0444,  		.proc_handler	= proc_dointvec, @@ -2322,96 +2101,6 @@ static struct ctl_table kern_table[] = {  		.mode		= 0444,  		.proc_handler	= proc_dointvec,  	}, -#if defined(CONFIG_LOCKUP_DETECTOR) -	{ -		.procname       = "watchdog", -		.data		= &watchdog_user_enabled, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler   = proc_watchdog, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -	{ -		.procname	= "watchdog_thresh", -		.data		= &watchdog_thresh, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_watchdog_thresh, -		.extra1		= SYSCTL_ZERO, -		.extra2		= &sixty, -	}, -	{ -		.procname       = "nmi_watchdog", -		.data		= &nmi_watchdog_user_enabled, -		.maxlen		= sizeof(int), -		.mode		= NMI_WATCHDOG_SYSCTL_PERM, -		.proc_handler   = proc_nmi_watchdog, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -	{ -		.procname	= "watchdog_cpumask", -		.data		= &watchdog_cpumask_bits, -		.maxlen		= NR_CPUS, -		.mode		= 0644, -		.proc_handler	= proc_watchdog_cpumask, -	}, -#ifdef CONFIG_SOFTLOCKUP_DETECTOR -	{ -		.procname       = "soft_watchdog", -		.data		= &soft_watchdog_user_enabled, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler   = proc_soft_watchdog, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -	{ -		.procname	= "softlockup_panic", -		.data		= &softlockup_panic, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -#ifdef CONFIG_SMP -	{ -		.procname	= "softlockup_all_cpu_backtrace", -		.data		= &sysctl_softlockup_all_cpu_backtrace, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -#endif /* CONFIG_SMP */ -#endif -#ifdef CONFIG_HARDLOCKUP_DETECTOR -	{ -		.procname	= "hardlockup_panic", -		.data		= &hardlockup_panic, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -#ifdef CONFIG_SMP -	{ -		.procname	= "hardlockup_all_cpu_backtrace", -		.data		= &sysctl_hardlockup_all_cpu_backtrace, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -#endif /* CONFIG_SMP */ -#endif -#endif -  #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86)  	{  		.procname       = "unknown_nmi_panic", @@ -2514,60 +2203,6 @@ static struct ctl_table kern_table[] = {  		.proc_handler	= proc_dointvec,  	},  #endif -#ifdef CONFIG_DETECT_HUNG_TASK -#ifdef CONFIG_SMP -	{ -		.procname	= "hung_task_all_cpu_backtrace", -		.data		= &sysctl_hung_task_all_cpu_backtrace, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -#endif /* CONFIG_SMP */ -	{ -		.procname	= "hung_task_panic", -		.data		= &sysctl_hung_task_panic, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -	{ -		.procname	= "hung_task_check_count", -		.data		= &sysctl_hung_task_check_count, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -	}, -	{ -		.procname	= "hung_task_timeout_secs", -		.data		= &sysctl_hung_task_timeout_secs, -		.maxlen		= sizeof(unsigned long), -		.mode		= 0644, -		.proc_handler	= proc_dohung_task_timeout_secs, -		.extra2		= &hung_task_timeout_max, -	}, -	{ -		.procname	= "hung_task_check_interval_secs", -		.data		= &sysctl_hung_task_check_interval_secs, -		.maxlen		= sizeof(unsigned long), -		.mode		= 0644, -		.proc_handler	= proc_dohung_task_timeout_secs, -		.extra2		= &hung_task_timeout_max, -	}, -	{ -		.procname	= "hung_task_warnings", -		.data		= &sysctl_hung_task_warnings, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &neg_one, -	}, -#endif  #ifdef CONFIG_RT_MUTEXES  	{  		.procname	= "max_lock_depth", @@ -2627,7 +2262,7 @@ static struct ctl_table kern_table[] = {  		.mode		= 0644,  		.proc_handler	= perf_cpu_time_max_percent_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &one_hundred, +		.extra2		= SYSCTL_ONE_HUNDRED,  	},  	{  		.procname	= "perf_event_max_stack", @@ -2636,7 +2271,7 @@ static struct ctl_table kern_table[] = {  		.mode		= 0644,  		.proc_handler	= perf_event_max_stack_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &six_hundred_forty_kb, +		.extra2		= (void *)&six_hundred_forty_kb,  	},  	{  		.procname	= "perf_event_max_contexts_per_stack", @@ -2645,7 +2280,7 @@ static struct ctl_table kern_table[] = {  		.mode		= 0644,  		.proc_handler	= perf_event_max_stack_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &one_thousand, +		.extra2		= SYSCTL_ONE_THOUSAND,  	},  #endif  	{ @@ -2676,7 +2311,7 @@ static struct ctl_table kern_table[] = {  		.mode		= 0644,  		.proc_handler	= bpf_unpriv_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &two, +		.extra2		= SYSCTL_TWO,  	},  	{  		.procname	= "bpf_stats_enabled", @@ -2708,17 +2343,6 @@ static struct ctl_table kern_table[] = {  		.extra2		= SYSCTL_INT_MAX,  	},  #endif -#ifdef CONFIG_STACKLEAK_RUNTIME_DISABLE -	{ -		.procname	= "stack_erasing", -		.data		= NULL, -		.maxlen		= sizeof(int), -		.mode		= 0600, -		.proc_handler	= stack_erasing_sysctl, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -#endif  	{ }  }; @@ -2730,7 +2354,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= overcommit_policy_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &two, +		.extra2		= SYSCTL_TWO,  	},  	{  		.procname	= "panic_on_oom", @@ -2739,7 +2363,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &two, +		.extra2		= SYSCTL_TWO,  	},  	{  		.procname	= "oom_kill_allocating_task", @@ -2784,7 +2408,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= dirty_background_ratio_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &one_hundred, +		.extra2		= SYSCTL_ONE_HUNDRED,  	},  	{  		.procname	= "dirty_background_bytes", @@ -2792,7 +2416,7 @@ static struct ctl_table vm_table[] = {  		.maxlen		= sizeof(dirty_background_bytes),  		.mode		= 0644,  		.proc_handler	= dirty_background_bytes_handler, -		.extra1		= &one_ul, +		.extra1		= SYSCTL_LONG_ONE,  	},  	{  		.procname	= "dirty_ratio", @@ -2801,7 +2425,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= dirty_ratio_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &one_hundred, +		.extra2		= SYSCTL_ONE_HUNDRED,  	},  	{  		.procname	= "dirty_bytes", @@ -2809,7 +2433,7 @@ static struct ctl_table vm_table[] = {  		.maxlen		= sizeof(vm_dirty_bytes),  		.mode		= 0644,  		.proc_handler	= dirty_bytes_handler, -		.extra1		= &dirty_bytes_min, +		.extra1		= (void *)&dirty_bytes_min,  	},  	{  		.procname	= "dirty_writeback_centisecs", @@ -2841,7 +2465,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &two_hundred, +		.extra2		= SYSCTL_TWO_HUNDRED,  	},  #ifdef CONFIG_HUGETLB_PAGE  	{ @@ -2898,7 +2522,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0200,  		.proc_handler	= drop_caches_sysctl_handler,  		.extra1		= SYSCTL_ONE, -		.extra2		= &four, +		.extra2		= SYSCTL_FOUR,  	},  #ifdef CONFIG_COMPACTION  	{ @@ -2915,7 +2539,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= compaction_proactiveness_sysctl_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &one_hundred, +		.extra2		= SYSCTL_ONE_HUNDRED,  	},  	{  		.procname	= "extfrag_threshold", @@ -2923,8 +2547,8 @@ static struct ctl_table vm_table[] = {  		.maxlen		= sizeof(int),  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &min_extfrag_threshold, -		.extra2		= &max_extfrag_threshold, +		.extra1		= SYSCTL_ZERO, +		.extra2		= (void *)&max_extfrag_threshold,  	},  	{  		.procname	= "compact_unevictable_allowed", @@ -2960,7 +2584,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= watermark_scale_factor_sysctl_handler,  		.extra1		= SYSCTL_ONE, -		.extra2		= &one_thousand, +		.extra2		= SYSCTL_THREE_THOUSAND,  	},  	{  		.procname	= "percpu_pagelist_high_fraction", @@ -3039,7 +2663,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= sysctl_min_unmapped_ratio_sysctl_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &one_hundred, +		.extra2		= SYSCTL_ONE_HUNDRED,  	},  	{  		.procname	= "min_slab_ratio", @@ -3048,7 +2672,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= sysctl_min_slab_ratio_sysctl_handler,  		.extra1		= SYSCTL_ZERO, -		.extra2		= &one_hundred, +		.extra2		= SYSCTL_ONE_HUNDRED,  	},  #endif  #ifdef CONFIG_SMP @@ -3182,221 +2806,6 @@ static struct ctl_table vm_table[] = {  	{ }  }; -static struct ctl_table fs_table[] = { -	{ -		.procname	= "inode-nr", -		.data		= &inodes_stat, -		.maxlen		= 2*sizeof(long), -		.mode		= 0444, -		.proc_handler	= proc_nr_inodes, -	}, -	{ -		.procname	= "inode-state", -		.data		= &inodes_stat, -		.maxlen		= 7*sizeof(long), -		.mode		= 0444, -		.proc_handler	= proc_nr_inodes, -	}, -	{ -		.procname	= "file-nr", -		.data		= &files_stat, -		.maxlen		= sizeof(files_stat), -		.mode		= 0444, -		.proc_handler	= proc_nr_files, -	}, -	{ -		.procname	= "file-max", -		.data		= &files_stat.max_files, -		.maxlen		= sizeof(files_stat.max_files), -		.mode		= 0644, -		.proc_handler	= proc_doulongvec_minmax, -		.extra1		= &zero_ul, -		.extra2		= &long_max, -	}, -	{ -		.procname	= "nr_open", -		.data		= &sysctl_nr_open, -		.maxlen		= sizeof(unsigned int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &sysctl_nr_open_min, -		.extra2		= &sysctl_nr_open_max, -	}, -	{ -		.procname	= "dentry-state", -		.data		= &dentry_stat, -		.maxlen		= 6*sizeof(long), -		.mode		= 0444, -		.proc_handler	= proc_nr_dentry, -	}, -	{ -		.procname	= "overflowuid", -		.data		= &fs_overflowuid, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &minolduid, -		.extra2		= &maxolduid, -	}, -	{ -		.procname	= "overflowgid", -		.data		= &fs_overflowgid, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= &minolduid, -		.extra2		= &maxolduid, -	}, -#ifdef CONFIG_FILE_LOCKING -	{ -		.procname	= "leases-enable", -		.data		= &leases_enable, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec, -	}, -#endif -#ifdef CONFIG_DNOTIFY -	{ -		.procname	= "dir-notify-enable", -		.data		= &dir_notify_enable, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec, -	}, -#endif -#ifdef CONFIG_MMU -#ifdef CONFIG_FILE_LOCKING -	{ -		.procname	= "lease-break-time", -		.data		= &lease_break_time, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec, -	}, -#endif -#ifdef CONFIG_AIO -	{ -		.procname	= "aio-nr", -		.data		= &aio_nr, -		.maxlen		= sizeof(aio_nr), -		.mode		= 0444, -		.proc_handler	= proc_doulongvec_minmax, -	}, -	{ -		.procname	= "aio-max-nr", -		.data		= &aio_max_nr, -		.maxlen		= sizeof(aio_max_nr), -		.mode		= 0644, -		.proc_handler	= proc_doulongvec_minmax, -	}, -#endif /* CONFIG_AIO */ -#ifdef CONFIG_INOTIFY_USER -	{ -		.procname	= "inotify", -		.mode		= 0555, -		.child		= inotify_table, -	}, -#endif -#ifdef CONFIG_FANOTIFY -	{ -		.procname	= "fanotify", -		.mode		= 0555, -		.child		= fanotify_table, -	}, -#endif -#ifdef CONFIG_EPOLL -	{ -		.procname	= "epoll", -		.mode		= 0555, -		.child		= epoll_table, -	}, -#endif -#endif -	{ -		.procname	= "protected_symlinks", -		.data		= &sysctl_protected_symlinks, -		.maxlen		= sizeof(int), -		.mode		= 0600, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -	{ -		.procname	= "protected_hardlinks", -		.data		= &sysctl_protected_hardlinks, -		.maxlen		= sizeof(int), -		.mode		= 0600, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -	{ -		.procname	= "protected_fifos", -		.data		= &sysctl_protected_fifos, -		.maxlen		= sizeof(int), -		.mode		= 0600, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= &two, -	}, -	{ -		.procname	= "protected_regular", -		.data		= &sysctl_protected_regular, -		.maxlen		= sizeof(int), -		.mode		= 0600, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -		.extra2		= &two, -	}, -	{ -		.procname	= "suid_dumpable", -		.data		= &suid_dumpable, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax_coredump, -		.extra1		= SYSCTL_ZERO, -		.extra2		= &two, -	}, -#if defined(CONFIG_BINFMT_MISC) || defined(CONFIG_BINFMT_MISC_MODULE) -	{ -		.procname	= "binfmt_misc", -		.mode		= 0555, -		.child		= sysctl_mount_point, -	}, -#endif -	{ -		.procname	= "pipe-max-size", -		.data		= &pipe_max_size, -		.maxlen		= sizeof(pipe_max_size), -		.mode		= 0644, -		.proc_handler	= proc_dopipe_max_size, -	}, -	{ -		.procname	= "pipe-user-pages-hard", -		.data		= &pipe_user_pages_hard, -		.maxlen		= sizeof(pipe_user_pages_hard), -		.mode		= 0644, -		.proc_handler	= proc_doulongvec_minmax, -	}, -	{ -		.procname	= "pipe-user-pages-soft", -		.data		= &pipe_user_pages_soft, -		.maxlen		= sizeof(pipe_user_pages_soft), -		.mode		= 0644, -		.proc_handler	= proc_doulongvec_minmax, -	}, -	{ -		.procname	= "mount-max", -		.data		= &sysctl_mount_max, -		.maxlen		= sizeof(unsigned int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ONE, -	}, -	{ } -}; -  static struct ctl_table debug_table[] = {  #ifdef CONFIG_SYSCTL_EXCEPTION_TRACE  	{ @@ -3407,17 +2816,6 @@ static struct ctl_table debug_table[] = {  		.proc_handler	= proc_dointvec  	},  #endif -#if defined(CONFIG_OPTPROBES) -	{ -		.procname	= "kprobes-optimization", -		.data		= &sysctl_kprobes_optimization, -		.maxlen		= sizeof(int), -		.mode		= 0644, -		.proc_handler	= proc_kprobes_optimization_handler, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_ONE, -	}, -#endif  	{ }  }; @@ -3425,41 +2823,18 @@ static struct ctl_table dev_table[] = {  	{ }  }; -static struct ctl_table sysctl_base_table[] = { -	{ -		.procname	= "kernel", -		.mode		= 0555, -		.child		= kern_table, -	}, -	{ -		.procname	= "vm", -		.mode		= 0555, -		.child		= vm_table, -	}, -	{ -		.procname	= "fs", -		.mode		= 0555, -		.child		= fs_table, -	}, -	{ -		.procname	= "debug", -		.mode		= 0555, -		.child		= debug_table, -	}, -	{ -		.procname	= "dev", -		.mode		= 0555, -		.child		= dev_table, -	}, -	{ } -}; +DECLARE_SYSCTL_BASE(kernel, kern_table); +DECLARE_SYSCTL_BASE(vm, vm_table); +DECLARE_SYSCTL_BASE(debug, debug_table); +DECLARE_SYSCTL_BASE(dev, dev_table); -int __init sysctl_init(void) +int __init sysctl_init_bases(void)  { -	struct ctl_table_header *hdr; +	register_sysctl_base(kernel); +	register_sysctl_base(vm); +	register_sysctl_base(debug); +	register_sysctl_base(dev); -	hdr = register_sysctl_table(sysctl_base_table); -	kmemleak_not_leak(hdr);  	return 0;  }  #endif /* CONFIG_SYSCTL */  |