On Fri, Apr 24, 2020 at 08:43:37AM +0200, Christoph Hellwig wrote: > Move the sysctl tables to the end of the file to avoid lots of pointless > forward declarations. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> -Kees > --- > kernel/sysctl.c | 3565 +++++++++++++++++++++++------------------------ > 1 file changed, 1764 insertions(+), 1801 deletions(-) > > diff --git a/kernel/sysctl.c b/kernel/sysctl.c > index 31b934865ebc3..511543d238794 100644 > --- a/kernel/sysctl.c > +++ b/kernel/sysctl.c > @@ -176,79 +176,13 @@ enum sysctl_writes_mode { > }; > > static enum sysctl_writes_mode sysctl_writes_strict = SYSCTL_WRITES_STRICT; > - > -static int proc_do_cad_pid(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos); > -static int proc_taint(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos); > -#ifdef CONFIG_COMPACTION > -static int proc_dointvec_minmax_warn_RT_change(struct ctl_table *table, > - int write, void __user *buffer, > - size_t *lenp, loff_t *ppos); > -#endif > -#endif > - > -#ifdef CONFIG_PRINTK > -static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos); > -#endif > - > -static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos); > -#ifdef CONFIG_COREDUMP > -static int proc_dostring_coredump(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos); > -#endif > -static int proc_dopipe_max_size(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos); > - > -#ifdef CONFIG_MAGIC_SYSRQ > -static int sysrq_sysctl_handler(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos); > -#endif > - > -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[]; > +#endif /* CONFIG_PROC_SYSCTL */ > > #if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \ > defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT) > int sysctl_legacy_va_layout; > #endif > > -/* The default sysctl tables: */ > - > -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, > - }, > - { } > -}; > - > #ifdef CONFIG_SCHED_DEBUG > static int min_sched_granularity_ns = 100000; /* 100 usecs */ > static int max_sched_granularity_ns = NSEC_PER_SEC; /* 1 second */ > @@ -265,1676 +199,12 @@ static int min_extfrag_threshold; > static int max_extfrag_threshold = 1000; > #endif > > -static struct ctl_table kern_table[] = { > - { > - .procname = "sched_child_runs_first", > - .data = &sysctl_sched_child_runs_first, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#ifdef CONFIG_SCHED_DEBUG > - { > - .procname = "sched_min_granularity_ns", > - .data = &sysctl_sched_min_granularity, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sched_proc_update_handler, > - .extra1 = &min_sched_granularity_ns, > - .extra2 = &max_sched_granularity_ns, > - }, > - { > - .procname = "sched_latency_ns", > - .data = &sysctl_sched_latency, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sched_proc_update_handler, > - .extra1 = &min_sched_granularity_ns, > - .extra2 = &max_sched_granularity_ns, > - }, > - { > - .procname = "sched_wakeup_granularity_ns", > - .data = &sysctl_sched_wakeup_granularity, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sched_proc_update_handler, > - .extra1 = &min_wakeup_granularity_ns, > - .extra2 = &max_wakeup_granularity_ns, > - }, > -#ifdef CONFIG_SMP > - { > - .procname = "sched_tunable_scaling", > - .data = &sysctl_sched_tunable_scaling, > - .maxlen = sizeof(enum sched_tunable_scaling), > - .mode = 0644, > - .proc_handler = sched_proc_update_handler, > - .extra1 = &min_sched_tunable_scaling, > - .extra2 = &max_sched_tunable_scaling, > - }, > - { > - .procname = "sched_migration_cost_ns", > - .data = &sysctl_sched_migration_cost, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "sched_nr_migrate", > - .data = &sysctl_sched_nr_migrate, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#ifdef CONFIG_SCHEDSTATS > - { > - .procname = "sched_schedstats", > - .data = NULL, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sysctl_schedstats, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif /* CONFIG_SCHEDSTATS */ > -#endif /* CONFIG_SMP */ > -#ifdef CONFIG_NUMA_BALANCING > - { > - .procname = "numa_balancing_scan_delay_ms", > - .data = &sysctl_numa_balancing_scan_delay, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "numa_balancing_scan_period_min_ms", > - .data = &sysctl_numa_balancing_scan_period_min, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "numa_balancing_scan_period_max_ms", > - .data = &sysctl_numa_balancing_scan_period_max, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "numa_balancing_scan_size_mb", > - .data = &sysctl_numa_balancing_scan_size, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ONE, > - }, > - { > - .procname = "numa_balancing", > - .data = NULL, /* filled in by handler */ > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sysctl_numa_balancing, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif /* CONFIG_NUMA_BALANCING */ > -#endif /* CONFIG_SCHED_DEBUG */ > - { > - .procname = "sched_rt_period_us", > - .data = &sysctl_sched_rt_period, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sched_rt_handler, > - }, > - { > - .procname = "sched_rt_runtime_us", > - .data = &sysctl_sched_rt_runtime, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = sched_rt_handler, > - }, > - { > - .procname = "sched_rr_timeslice_ms", > - .data = &sysctl_sched_rr_timeslice, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = sched_rr_handler, > - }, > -#ifdef CONFIG_UCLAMP_TASK > - { > - .procname = "sched_util_clamp_min", > - .data = &sysctl_sched_uclamp_util_min, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sysctl_sched_uclamp_handler, > - }, > - { > - .procname = "sched_util_clamp_max", > - .data = &sysctl_sched_uclamp_util_max, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sysctl_sched_uclamp_handler, > - }, > -#endif > -#ifdef CONFIG_SCHED_AUTOGROUP > - { > - .procname = "sched_autogroup_enabled", > - .data = &sysctl_sched_autogroup_enabled, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > -#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 = SYSCTL_ONE, > - }, > -#endif > -#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) > - { > - .procname = "sched_energy_aware", > - .data = &sysctl_sched_energy_aware, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = sched_energy_aware_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > -#ifdef CONFIG_PROVE_LOCKING > - { > - .procname = "prove_locking", > - .data = &prove_locking, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#ifdef CONFIG_LOCK_STAT > - { > - .procname = "lock_stat", > - .data = &lock_stat, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > - { > - .procname = "panic", > - .data = &panic_timeout, > - .maxlen = sizeof(int), > - .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", > - .maxlen = sizeof(long), > - .mode = 0644, > - .proc_handler = proc_taint, > - }, > - { > - .procname = "sysctl_writes_strict", > - .data = &sysctl_writes_strict, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = &neg_one, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > -#ifdef CONFIG_LATENCYTOP > - { > - .procname = "latencytop", > - .data = &latencytop_enabled, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = sysctl_latencytop, > - }, > -#endif > -#ifdef CONFIG_BLK_DEV_INITRD > - { > - .procname = "real-root-dev", > - .data = &real_root_dev, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > - { > - .procname = "print-fatal-signals", > - .data = &print_fatal_signals, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#ifdef CONFIG_SPARC > - { > - .procname = "reboot-cmd", > - .data = reboot_command, > - .maxlen = 256, > - .mode = 0644, > - .proc_handler = proc_dostring, > - }, > - { > - .procname = "stop-a", > - .data = &stop_a_enabled, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "scons-poweroff", > - .data = &scons_pwroff, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#ifdef CONFIG_SPARC64 > - { > - .procname = "tsb-ratio", > - .data = &sysctl_tsb_ratio, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#ifdef CONFIG_PARISC > - { > - .procname = "soft-power", > - .data = &pwrsw_enabled, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#ifdef CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW > - { > - .procname = "unaligned-trap", > - .data = &unaligned_enabled, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > - { > - .procname = "ctrl-alt-del", > - .data = &C_A_D, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#ifdef CONFIG_FUNCTION_TRACER > - { > - .procname = "ftrace_enabled", > - .data = &ftrace_enabled, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = ftrace_enable_sysctl, > - }, > -#endif > -#ifdef CONFIG_STACK_TRACER > - { > - .procname = "stack_tracer_enabled", > - .data = &stack_tracer_enabled, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = stack_trace_sysctl, > - }, > -#endif > -#ifdef CONFIG_TRACING > - { > - .procname = "ftrace_dump_on_oops", > - .data = &ftrace_dump_on_oops, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "traceoff_on_warning", > - .data = &__disable_trace_on_warning, > - .maxlen = sizeof(__disable_trace_on_warning), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "tracepoint_printk", > - .data = &tracepoint_printk, > - .maxlen = sizeof(tracepoint_printk), > - .mode = 0644, > - .proc_handler = tracepoint_printk_sysctl, > - }, > -#endif > -#ifdef CONFIG_KEXEC_CORE > - { > - .procname = "kexec_load_disabled", > - .data = &kexec_load_disabled, > - .maxlen = sizeof(int), > - .mode = 0644, > - /* only handle a transition from default "0" to "1" */ > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ONE, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > -#ifdef CONFIG_MODULES > - { > - .procname = "modprobe", > - .data = &modprobe_path, > - .maxlen = KMOD_PATH_LEN, > - .mode = 0644, > - .proc_handler = proc_dostring, > - }, > - { > - .procname = "modules_disabled", > - .data = &modules_disabled, > - .maxlen = sizeof(int), > - .mode = 0644, > - /* only handle a transition from default "0" to "1" */ > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ONE, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > -#ifdef CONFIG_UEVENT_HELPER > - { > - .procname = "hotplug", > - .data = &uevent_helper, > - .maxlen = UEVENT_HELPER_PATH_LEN, > - .mode = 0644, > - .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", > - .data = &acct_parm, > - .maxlen = 3*sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#ifdef CONFIG_MAGIC_SYSRQ > - { > - .procname = "sysrq", > - .data = NULL, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = sysrq_sysctl_handler, > - }, > -#endif > -#ifdef CONFIG_PROC_SYSCTL > - { > - .procname = "cad_pid", > - .data = NULL, > - .maxlen = sizeof (int), > - .mode = 0600, > - .proc_handler = proc_do_cad_pid, > - }, > -#endif > - { > - .procname = "threads-max", > - .data = NULL, > - .maxlen = sizeof(int), > - .mode = 0644, > - .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, > - }, > - { > - .procname = "overflowgid", > - .data = &overflowgid, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = &minolduid, > - .extra2 = &maxolduid, > - }, > -#ifdef CONFIG_S390 > - { > - .procname = "userprocess_debug", > - .data = &show_unhandled_signals, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > - { > - .procname = "pid_max", > - .data = &pid_max, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = &pid_max_min, > - .extra2 = &pid_max_max, > - }, > - { > - .procname = "panic_on_oops", > - .data = &panic_on_oops, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "panic_print", > - .data = &panic_print, > - .maxlen = sizeof(unsigned long), > - .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, > - .maxlen = sizeof (int), > - .mode = 0444, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "cap_last_cap", > - .data = (void *)&cap_last_cap, > - .maxlen = sizeof(int), > - .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", > - .data = &unknown_nmi_panic, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#if defined(CONFIG_X86) > - { > - .procname = "panic_on_unrecovered_nmi", > - .data = &panic_on_unrecovered_nmi, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "panic_on_io_nmi", > - .data = &panic_on_io_nmi, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#ifdef CONFIG_DEBUG_STACKOVERFLOW > - { > - .procname = "panic_on_stackoverflow", > - .data = &sysctl_panic_on_stackoverflow, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > - { > - .procname = "bootloader_type", > - .data = &bootloader_type, > - .maxlen = sizeof (int), > - .mode = 0444, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "bootloader_version", > - .data = &bootloader_version, > - .maxlen = sizeof (int), > - .mode = 0444, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "io_delay_type", > - .data = &io_delay_type, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#if defined(CONFIG_MMU) > - { > - .procname = "randomize_va_space", > - .data = &randomize_va_space, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#if defined(CONFIG_S390) && defined(CONFIG_SMP) > - { > - .procname = "spin_retry", > - .data = &spin_retry, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#if defined(CONFIG_ACPI_SLEEP) && defined(CONFIG_X86) > - { > - .procname = "acpi_video_flags", > - .data = &acpi_realmode_flags, > - .maxlen = sizeof (unsigned long), > - .mode = 0644, > - .proc_handler = proc_doulongvec_minmax, > - }, > -#endif > -#ifdef CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN > - { > - .procname = "ignore-unaligned-usertrap", > - .data = &no_unaligned_warning, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#ifdef CONFIG_IA64 > - { > - .procname = "unaligned-dump-stack", > - .data = &unaligned_dump_stack, > - .maxlen = sizeof (int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > -#ifdef CONFIG_DETECT_HUNG_TASK > - { > - .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", > - .data = &max_lock_depth, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > -#endif > - { > - .procname = "poweroff_cmd", > - .data = &poweroff_cmd, > - .maxlen = POWEROFF_CMD_PATH_LEN, > - .mode = 0644, > - .proc_handler = proc_dostring, > - }, > -#ifdef CONFIG_KEYS > - { > - .procname = "keys", > - .mode = 0555, > - .child = key_sysctls, > - }, > -#endif > -#ifdef CONFIG_PERF_EVENTS > - /* > - * 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! > - */ > - { > - .procname = "perf_event_paranoid", > - .data = &sysctl_perf_event_paranoid, > - .maxlen = sizeof(sysctl_perf_event_paranoid), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "perf_event_mlock_kb", > - .data = &sysctl_perf_event_mlock, > - .maxlen = sizeof(sysctl_perf_event_mlock), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "perf_event_max_sample_rate", > - .data = &sysctl_perf_event_sample_rate, > - .maxlen = sizeof(sysctl_perf_event_sample_rate), > - .mode = 0644, > - .proc_handler = perf_proc_update_handler, > - .extra1 = SYSCTL_ONE, > - }, > - { > - .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 = SYSCTL_ZERO, > - .extra2 = &one_hundred, > - }, > - { > - .procname = "perf_event_max_stack", > - .data = &sysctl_perf_event_max_stack, > - .maxlen = sizeof(sysctl_perf_event_max_stack), > - .mode = 0644, > - .proc_handler = perf_event_max_stack_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &six_hundred_forty_kb, > - }, > - { > - .procname = "perf_event_max_contexts_per_stack", > - .data = &sysctl_perf_event_max_contexts_per_stack, > - .maxlen = sizeof(sysctl_perf_event_max_contexts_per_stack), > - .mode = 0644, > - .proc_handler = perf_event_max_stack_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &one_thousand, > - }, > -#endif > - { > - .procname = "panic_on_warn", > - .data = &panic_on_warn, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) > - { > - .procname = "timer_migration", > - .data = &sysctl_timer_migration, > - .maxlen = sizeof(unsigned int), > - .mode = 0644, > - .proc_handler = timer_migration_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > -#ifdef CONFIG_BPF_SYSCALL > - { > - .procname = "unprivileged_bpf_disabled", > - .data = &sysctl_unprivileged_bpf_disabled, > - .maxlen = sizeof(sysctl_unprivileged_bpf_disabled), > - .mode = 0644, > - /* only handle a transition from default "0" to "1" */ > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ONE, > - .extra2 = SYSCTL_ONE, > - }, > - { > - .procname = "bpf_stats_enabled", > - .data = &bpf_stats_enabled_key.key, > - .maxlen = sizeof(bpf_stats_enabled_key), > - .mode = 0644, > - .proc_handler = proc_do_static_key, > - }, > -#endif > -#if defined(CONFIG_TREE_RCU) > - { > - .procname = "panic_on_rcu_stall", > - .data = &sysctl_panic_on_rcu_stall, > - .maxlen = sizeof(sysctl_panic_on_rcu_stall), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#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 > - { } > -}; > - > -static struct ctl_table vm_table[] = { > - { > - .procname = "overcommit_memory", > - .data = &sysctl_overcommit_memory, > - .maxlen = sizeof(sysctl_overcommit_memory), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &two, > - }, > - { > - .procname = "panic_on_oom", > - .data = &sysctl_panic_on_oom, > - .maxlen = sizeof(sysctl_panic_on_oom), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &two, > - }, > - { > - .procname = "oom_kill_allocating_task", > - .data = &sysctl_oom_kill_allocating_task, > - .maxlen = sizeof(sysctl_oom_kill_allocating_task), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "oom_dump_tasks", > - .data = &sysctl_oom_dump_tasks, > - .maxlen = sizeof(sysctl_oom_dump_tasks), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "overcommit_ratio", > - .data = &sysctl_overcommit_ratio, > - .maxlen = sizeof(sysctl_overcommit_ratio), > - .mode = 0644, > - .proc_handler = overcommit_ratio_handler, > - }, > - { > - .procname = "overcommit_kbytes", > - .data = &sysctl_overcommit_kbytes, > - .maxlen = sizeof(sysctl_overcommit_kbytes), > - .mode = 0644, > - .proc_handler = overcommit_kbytes_handler, > - }, > - { > - .procname = "page-cluster", > - .data = &page_cluster, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - }, > - { > - .procname = "dirty_background_ratio", > - .data = &dirty_background_ratio, > - .maxlen = sizeof(dirty_background_ratio), > - .mode = 0644, > - .proc_handler = dirty_background_ratio_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &one_hundred, > - }, > - { > - .procname = "dirty_background_bytes", > - .data = &dirty_background_bytes, > - .maxlen = sizeof(dirty_background_bytes), > - .mode = 0644, > - .proc_handler = dirty_background_bytes_handler, > - .extra1 = &one_ul, > - }, > - { > - .procname = "dirty_ratio", > - .data = &vm_dirty_ratio, > - .maxlen = sizeof(vm_dirty_ratio), > - .mode = 0644, > - .proc_handler = dirty_ratio_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &one_hundred, > - }, > - { > - .procname = "dirty_bytes", > - .data = &vm_dirty_bytes, > - .maxlen = sizeof(vm_dirty_bytes), > - .mode = 0644, > - .proc_handler = dirty_bytes_handler, > - .extra1 = &dirty_bytes_min, > - }, > - { > - .procname = "dirty_writeback_centisecs", > - .data = &dirty_writeback_interval, > - .maxlen = sizeof(dirty_writeback_interval), > - .mode = 0644, > - .proc_handler = dirty_writeback_centisecs_handler, > - }, > - { > - .procname = "dirty_expire_centisecs", > - .data = &dirty_expire_interval, > - .maxlen = sizeof(dirty_expire_interval), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - }, > - { > - .procname = "dirtytime_expire_seconds", > - .data = &dirtytime_expire_interval, > - .maxlen = sizeof(dirtytime_expire_interval), > - .mode = 0644, > - .proc_handler = dirtytime_interval_handler, > - .extra1 = SYSCTL_ZERO, > - }, > - { > - .procname = "swappiness", > - .data = &vm_swappiness, > - .maxlen = sizeof(vm_swappiness), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &one_hundred, > - }, > -#ifdef CONFIG_HUGETLB_PAGE > - { > - .procname = "nr_hugepages", > - .data = NULL, > - .maxlen = sizeof(unsigned long), > - .mode = 0644, > - .proc_handler = hugetlb_sysctl_handler, > - }, > -#ifdef CONFIG_NUMA > - { > - .procname = "nr_hugepages_mempolicy", > - .data = NULL, > - .maxlen = sizeof(unsigned long), > - .mode = 0644, > - .proc_handler = &hugetlb_mempolicy_sysctl_handler, > - }, > - { > - .procname = "numa_stat", > - .data = &sysctl_vm_numa_stat, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = sysctl_vm_numa_stat_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > - { > - .procname = "hugetlb_shm_group", > - .data = &sysctl_hugetlb_shm_group, > - .maxlen = sizeof(gid_t), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - }, > - { > - .procname = "nr_overcommit_hugepages", > - .data = NULL, > - .maxlen = sizeof(unsigned long), > - .mode = 0644, > - .proc_handler = hugetlb_overcommit_handler, > - }, > -#endif > - { > - .procname = "lowmem_reserve_ratio", > - .data = &sysctl_lowmem_reserve_ratio, > - .maxlen = sizeof(sysctl_lowmem_reserve_ratio), > - .mode = 0644, > - .proc_handler = lowmem_reserve_ratio_sysctl_handler, > - }, > - { > - .procname = "drop_caches", > - .data = &sysctl_drop_caches, > - .maxlen = sizeof(int), > - .mode = 0200, > - .proc_handler = drop_caches_sysctl_handler, > - .extra1 = SYSCTL_ONE, > - .extra2 = &four, > - }, > -#ifdef CONFIG_COMPACTION > - { > - .procname = "compact_memory", > - .data = &sysctl_compact_memory, > - .maxlen = sizeof(int), > - .mode = 0200, > - .proc_handler = sysctl_compaction_handler, > - }, > - { > - .procname = "extfrag_threshold", > - .data = &sysctl_extfrag_threshold, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = &min_extfrag_threshold, > - .extra2 = &max_extfrag_threshold, > - }, > - { > - .procname = "compact_unevictable_allowed", > - .data = &sysctl_compact_unevictable_allowed, > - .maxlen = sizeof(int), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax_warn_RT_change, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > - > -#endif /* CONFIG_COMPACTION */ > - { > - .procname = "min_free_kbytes", > - .data = &min_free_kbytes, > - .maxlen = sizeof(min_free_kbytes), > - .mode = 0644, > - .proc_handler = min_free_kbytes_sysctl_handler, > - .extra1 = SYSCTL_ZERO, > - }, > - { > - .procname = "watermark_boost_factor", > - .data = &watermark_boost_factor, > - .maxlen = sizeof(watermark_boost_factor), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - }, > - { > - .procname = "watermark_scale_factor", > - .data = &watermark_scale_factor, > - .maxlen = sizeof(watermark_scale_factor), > - .mode = 0644, > - .proc_handler = watermark_scale_factor_sysctl_handler, > - .extra1 = SYSCTL_ONE, > - .extra2 = &one_thousand, > - }, > - { > - .procname = "percpu_pagelist_fraction", > - .data = &percpu_pagelist_fraction, > - .maxlen = sizeof(percpu_pagelist_fraction), > - .mode = 0644, > - .proc_handler = percpu_pagelist_fraction_sysctl_handler, > - .extra1 = SYSCTL_ZERO, > - }, > -#ifdef CONFIG_MMU > - { > - .procname = "max_map_count", > - .data = &sysctl_max_map_count, > - .maxlen = sizeof(sysctl_max_map_count), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - }, > -#else > - { > - .procname = "nr_trim_pages", > - .data = &sysctl_nr_trim_pages, > - .maxlen = sizeof(sysctl_nr_trim_pages), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - }, > -#endif > - { > - .procname = "laptop_mode", > - .data = &laptop_mode, > - .maxlen = sizeof(laptop_mode), > - .mode = 0644, > - .proc_handler = proc_dointvec_jiffies, > - }, > - { > - .procname = "block_dump", > - .data = &block_dump, > - .maxlen = sizeof(block_dump), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - .extra1 = SYSCTL_ZERO, > - }, > - { > - .procname = "vfs_cache_pressure", > - .data = &sysctl_vfs_cache_pressure, > - .maxlen = sizeof(sysctl_vfs_cache_pressure), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - .extra1 = SYSCTL_ZERO, > - }, > -#if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \ > - defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT) > - { > - .procname = "legacy_va_layout", > - .data = &sysctl_legacy_va_layout, > - .maxlen = sizeof(sysctl_legacy_va_layout), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - .extra1 = SYSCTL_ZERO, > - }, > -#endif > -#ifdef CONFIG_NUMA > - { > - .procname = "zone_reclaim_mode", > - .data = &node_reclaim_mode, > - .maxlen = sizeof(node_reclaim_mode), > - .mode = 0644, > - .proc_handler = proc_dointvec, > - .extra1 = SYSCTL_ZERO, > - }, > - { > - .procname = "min_unmapped_ratio", > - .data = &sysctl_min_unmapped_ratio, > - .maxlen = sizeof(sysctl_min_unmapped_ratio), > - .mode = 0644, > - .proc_handler = sysctl_min_unmapped_ratio_sysctl_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &one_hundred, > - }, > - { > - .procname = "min_slab_ratio", > - .data = &sysctl_min_slab_ratio, > - .maxlen = sizeof(sysctl_min_slab_ratio), > - .mode = 0644, > - .proc_handler = sysctl_min_slab_ratio_sysctl_handler, > - .extra1 = SYSCTL_ZERO, > - .extra2 = &one_hundred, > - }, > -#endif > -#ifdef CONFIG_SMP > - { > - .procname = "stat_interval", > - .data = &sysctl_stat_interval, > - .maxlen = sizeof(sysctl_stat_interval), > - .mode = 0644, > - .proc_handler = proc_dointvec_jiffies, > - }, > - { > - .procname = "stat_refresh", > - .data = NULL, > - .maxlen = 0, > - .mode = 0600, > - .proc_handler = vmstat_refresh, > - }, > -#endif > -#ifdef CONFIG_MMU > - { > - .procname = "mmap_min_addr", > - .data = &dac_mmap_min_addr, > - .maxlen = sizeof(unsigned long), > - .mode = 0644, > - .proc_handler = mmap_min_addr_handler, > - }, > -#endif > -#ifdef CONFIG_NUMA > - { > - .procname = "numa_zonelist_order", > - .data = &numa_zonelist_order, > - .maxlen = NUMA_ZONELIST_ORDER_LEN, > - .mode = 0644, > - .proc_handler = numa_zonelist_order_handler, > - }, > -#endif > -#if (defined(CONFIG_X86_32) && !defined(CONFIG_UML))|| \ > - (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL)) > - { > - .procname = "vdso_enabled", > -#ifdef CONFIG_X86_32 > - .data = &vdso32_enabled, > - .maxlen = sizeof(vdso32_enabled), > -#else > - .data = &vdso_enabled, > - .maxlen = sizeof(vdso_enabled), > -#endif > - .mode = 0644, > - .proc_handler = proc_dointvec, > - .extra1 = SYSCTL_ZERO, > - }, > -#endif > -#ifdef CONFIG_HIGHMEM > - { > - .procname = "highmem_is_dirtyable", > - .data = &vm_highmem_is_dirtyable, > - .maxlen = sizeof(vm_highmem_is_dirtyable), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > -#ifdef CONFIG_MEMORY_FAILURE > - { > - .procname = "memory_failure_early_kill", > - .data = &sysctl_memory_failure_early_kill, > - .maxlen = sizeof(sysctl_memory_failure_early_kill), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > - { > - .procname = "memory_failure_recovery", > - .data = &sysctl_memory_failure_recovery, > - .maxlen = sizeof(sysctl_memory_failure_recovery), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > - { > - .procname = "user_reserve_kbytes", > - .data = &sysctl_user_reserve_kbytes, > - .maxlen = sizeof(sysctl_user_reserve_kbytes), > - .mode = 0644, > - .proc_handler = proc_doulongvec_minmax, > - }, > - { > - .procname = "admin_reserve_kbytes", > - .data = &sysctl_admin_reserve_kbytes, > - .maxlen = sizeof(sysctl_admin_reserve_kbytes), > - .mode = 0644, > - .proc_handler = proc_doulongvec_minmax, > - }, > -#ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS > - { > - .procname = "mmap_rnd_bits", > - .data = &mmap_rnd_bits, > - .maxlen = sizeof(mmap_rnd_bits), > - .mode = 0600, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = (void *)&mmap_rnd_bits_min, > - .extra2 = (void *)&mmap_rnd_bits_max, > - }, > -#endif > -#ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS > - { > - .procname = "mmap_rnd_compat_bits", > - .data = &mmap_rnd_compat_bits, > - .maxlen = sizeof(mmap_rnd_compat_bits), > - .mode = 0600, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = (void *)&mmap_rnd_compat_bits_min, > - .extra2 = (void *)&mmap_rnd_compat_bits_max, > - }, > -#endif > -#ifdef CONFIG_USERFAULTFD > - { > - .procname = "unprivileged_userfaultfd", > - .data = &sysctl_unprivileged_userfaultfd, > - .maxlen = sizeof(sysctl_unprivileged_userfaultfd), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }, > -#endif > - { } > -}; > - > -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_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 > - { > - .procname = "exception-trace", > - .data = &show_unhandled_signals, > - .maxlen = sizeof(int), > - .mode = 0644, > - .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 > - { } > -}; > - > -static struct ctl_table dev_table[] = { > - { } > -}; > - > -int __init sysctl_init(void) > -{ > - struct ctl_table_header *hdr; > - > - hdr = register_sysctl_table(sysctl_base_table); > - kmemleak_not_leak(hdr); > - return 0; > -} > - > -#endif /* CONFIG_SYSCTL */ > - > -/* > - * /proc/sys support > - */ > - > +#endif /* CONFIG_SYSCTL */ > + > +/* > + * /proc/sys support > + */ > + > #ifdef CONFIG_PROC_SYSCTL > > static int _proc_do_string(char *data, int maxlen, int write, > @@ -3307,95 +1577,1788 @@ int proc_dointvec(struct ctl_table *table, int write, > return -ENOSYS; > } > > -int proc_douintvec(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos) > +int proc_douintvec(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > +{ > + return -ENOSYS; > +} > + > +int proc_dointvec_minmax(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > +{ > + return -ENOSYS; > +} > + > +int proc_douintvec_minmax(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > +{ > + return -ENOSYS; > +} > + > +int proc_dointvec_jiffies(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > +{ > + return -ENOSYS; > +} > + > +int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > +{ > + return -ENOSYS; > +} > + > +int proc_dointvec_ms_jiffies(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > { > return -ENOSYS; > } > > -int proc_dointvec_minmax(struct ctl_table *table, int write, > +int proc_doulongvec_minmax(struct ctl_table *table, int write, > void __user *buffer, size_t *lenp, loff_t *ppos) > { > return -ENOSYS; > } > > -int proc_douintvec_minmax(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos) > +int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write, > + void __user *buffer, > + size_t *lenp, loff_t *ppos) > { > - return -ENOSYS; > + return -ENOSYS; > } > > -int proc_dointvec_jiffies(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos) > +int proc_do_large_bitmap(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > { > return -ENOSYS; > } > > -int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos) > -{ > - return -ENOSYS; > -} > +#endif /* CONFIG_PROC_SYSCTL */ > + > +#if defined(CONFIG_SYSCTL) > +int proc_do_static_key(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, > + loff_t *ppos) > +{ > + struct static_key *key = (struct static_key *)table->data; > + static DEFINE_MUTEX(static_key_mutex); > + int val, ret; > + struct ctl_table tmp = { > + .data = &val, > + .maxlen = sizeof(val), > + .mode = table->mode, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }; > + > + if (write && !capable(CAP_SYS_ADMIN)) > + return -EPERM; > + > + mutex_lock(&static_key_mutex); > + val = static_key_enabled(key); > + ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos); > + if (write && !ret) { > + if (val) > + static_key_enable(key); > + else > + static_key_disable(key); > + } > + mutex_unlock(&static_key_mutex); > + return ret; > +} > + > +static struct ctl_table kern_table[] = { > + { > + .procname = "sched_child_runs_first", > + .data = &sysctl_sched_child_runs_first, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#ifdef CONFIG_SCHED_DEBUG > + { > + .procname = "sched_min_granularity_ns", > + .data = &sysctl_sched_min_granularity, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sched_proc_update_handler, > + .extra1 = &min_sched_granularity_ns, > + .extra2 = &max_sched_granularity_ns, > + }, > + { > + .procname = "sched_latency_ns", > + .data = &sysctl_sched_latency, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sched_proc_update_handler, > + .extra1 = &min_sched_granularity_ns, > + .extra2 = &max_sched_granularity_ns, > + }, > + { > + .procname = "sched_wakeup_granularity_ns", > + .data = &sysctl_sched_wakeup_granularity, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sched_proc_update_handler, > + .extra1 = &min_wakeup_granularity_ns, > + .extra2 = &max_wakeup_granularity_ns, > + }, > +#ifdef CONFIG_SMP > + { > + .procname = "sched_tunable_scaling", > + .data = &sysctl_sched_tunable_scaling, > + .maxlen = sizeof(enum sched_tunable_scaling), > + .mode = 0644, > + .proc_handler = sched_proc_update_handler, > + .extra1 = &min_sched_tunable_scaling, > + .extra2 = &max_sched_tunable_scaling, > + }, > + { > + .procname = "sched_migration_cost_ns", > + .data = &sysctl_sched_migration_cost, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "sched_nr_migrate", > + .data = &sysctl_sched_nr_migrate, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#ifdef CONFIG_SCHEDSTATS > + { > + .procname = "sched_schedstats", > + .data = NULL, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sysctl_schedstats, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif /* CONFIG_SCHEDSTATS */ > +#endif /* CONFIG_SMP */ > +#ifdef CONFIG_NUMA_BALANCING > + { > + .procname = "numa_balancing_scan_delay_ms", > + .data = &sysctl_numa_balancing_scan_delay, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "numa_balancing_scan_period_min_ms", > + .data = &sysctl_numa_balancing_scan_period_min, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "numa_balancing_scan_period_max_ms", > + .data = &sysctl_numa_balancing_scan_period_max, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "numa_balancing_scan_size_mb", > + .data = &sysctl_numa_balancing_scan_size, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ONE, > + }, > + { > + .procname = "numa_balancing", > + .data = NULL, /* filled in by handler */ > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sysctl_numa_balancing, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif /* CONFIG_NUMA_BALANCING */ > +#endif /* CONFIG_SCHED_DEBUG */ > + { > + .procname = "sched_rt_period_us", > + .data = &sysctl_sched_rt_period, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sched_rt_handler, > + }, > + { > + .procname = "sched_rt_runtime_us", > + .data = &sysctl_sched_rt_runtime, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = sched_rt_handler, > + }, > + { > + .procname = "sched_rr_timeslice_ms", > + .data = &sysctl_sched_rr_timeslice, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = sched_rr_handler, > + }, > +#ifdef CONFIG_UCLAMP_TASK > + { > + .procname = "sched_util_clamp_min", > + .data = &sysctl_sched_uclamp_util_min, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sysctl_sched_uclamp_handler, > + }, > + { > + .procname = "sched_util_clamp_max", > + .data = &sysctl_sched_uclamp_util_max, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sysctl_sched_uclamp_handler, > + }, > +#endif > +#ifdef CONFIG_SCHED_AUTOGROUP > + { > + .procname = "sched_autogroup_enabled", > + .data = &sysctl_sched_autogroup_enabled, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > +#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 = SYSCTL_ONE, > + }, > +#endif > +#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) > + { > + .procname = "sched_energy_aware", > + .data = &sysctl_sched_energy_aware, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = sched_energy_aware_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > +#ifdef CONFIG_PROVE_LOCKING > + { > + .procname = "prove_locking", > + .data = &prove_locking, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#ifdef CONFIG_LOCK_STAT > + { > + .procname = "lock_stat", > + .data = &lock_stat, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > + { > + .procname = "panic", > + .data = &panic_timeout, > + .maxlen = sizeof(int), > + .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", > + .maxlen = sizeof(long), > + .mode = 0644, > + .proc_handler = proc_taint, > + }, > + { > + .procname = "sysctl_writes_strict", > + .data = &sysctl_writes_strict, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = &neg_one, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > +#ifdef CONFIG_LATENCYTOP > + { > + .procname = "latencytop", > + .data = &latencytop_enabled, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = sysctl_latencytop, > + }, > +#endif > +#ifdef CONFIG_BLK_DEV_INITRD > + { > + .procname = "real-root-dev", > + .data = &real_root_dev, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > + { > + .procname = "print-fatal-signals", > + .data = &print_fatal_signals, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#ifdef CONFIG_SPARC > + { > + .procname = "reboot-cmd", > + .data = reboot_command, > + .maxlen = 256, > + .mode = 0644, > + .proc_handler = proc_dostring, > + }, > + { > + .procname = "stop-a", > + .data = &stop_a_enabled, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "scons-poweroff", > + .data = &scons_pwroff, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#ifdef CONFIG_SPARC64 > + { > + .procname = "tsb-ratio", > + .data = &sysctl_tsb_ratio, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#ifdef CONFIG_PARISC > + { > + .procname = "soft-power", > + .data = &pwrsw_enabled, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#ifdef CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW > + { > + .procname = "unaligned-trap", > + .data = &unaligned_enabled, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > + { > + .procname = "ctrl-alt-del", > + .data = &C_A_D, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#ifdef CONFIG_FUNCTION_TRACER > + { > + .procname = "ftrace_enabled", > + .data = &ftrace_enabled, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = ftrace_enable_sysctl, > + }, > +#endif > +#ifdef CONFIG_STACK_TRACER > + { > + .procname = "stack_tracer_enabled", > + .data = &stack_tracer_enabled, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = stack_trace_sysctl, > + }, > +#endif > +#ifdef CONFIG_TRACING > + { > + .procname = "ftrace_dump_on_oops", > + .data = &ftrace_dump_on_oops, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "traceoff_on_warning", > + .data = &__disable_trace_on_warning, > + .maxlen = sizeof(__disable_trace_on_warning), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "tracepoint_printk", > + .data = &tracepoint_printk, > + .maxlen = sizeof(tracepoint_printk), > + .mode = 0644, > + .proc_handler = tracepoint_printk_sysctl, > + }, > +#endif > +#ifdef CONFIG_KEXEC_CORE > + { > + .procname = "kexec_load_disabled", > + .data = &kexec_load_disabled, > + .maxlen = sizeof(int), > + .mode = 0644, > + /* only handle a transition from default "0" to "1" */ > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ONE, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > +#ifdef CONFIG_MODULES > + { > + .procname = "modprobe", > + .data = &modprobe_path, > + .maxlen = KMOD_PATH_LEN, > + .mode = 0644, > + .proc_handler = proc_dostring, > + }, > + { > + .procname = "modules_disabled", > + .data = &modules_disabled, > + .maxlen = sizeof(int), > + .mode = 0644, > + /* only handle a transition from default "0" to "1" */ > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ONE, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > +#ifdef CONFIG_UEVENT_HELPER > + { > + .procname = "hotplug", > + .data = &uevent_helper, > + .maxlen = UEVENT_HELPER_PATH_LEN, > + .mode = 0644, > + .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", > + .data = &acct_parm, > + .maxlen = 3*sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#ifdef CONFIG_MAGIC_SYSRQ > + { > + .procname = "sysrq", > + .data = NULL, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = sysrq_sysctl_handler, > + }, > +#endif > +#ifdef CONFIG_PROC_SYSCTL > + { > + .procname = "cad_pid", > + .data = NULL, > + .maxlen = sizeof (int), > + .mode = 0600, > + .proc_handler = proc_do_cad_pid, > + }, > +#endif > + { > + .procname = "threads-max", > + .data = NULL, > + .maxlen = sizeof(int), > + .mode = 0644, > + .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, > + }, > + { > + .procname = "overflowgid", > + .data = &overflowgid, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = &minolduid, > + .extra2 = &maxolduid, > + }, > +#ifdef CONFIG_S390 > + { > + .procname = "userprocess_debug", > + .data = &show_unhandled_signals, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > + { > + .procname = "pid_max", > + .data = &pid_max, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = &pid_max_min, > + .extra2 = &pid_max_max, > + }, > + { > + .procname = "panic_on_oops", > + .data = &panic_on_oops, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "panic_print", > + .data = &panic_print, > + .maxlen = sizeof(unsigned long), > + .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, > + .maxlen = sizeof (int), > + .mode = 0444, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "cap_last_cap", > + .data = (void *)&cap_last_cap, > + .maxlen = sizeof(int), > + .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", > + .data = &unknown_nmi_panic, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#if defined(CONFIG_X86) > + { > + .procname = "panic_on_unrecovered_nmi", > + .data = &panic_on_unrecovered_nmi, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "panic_on_io_nmi", > + .data = &panic_on_io_nmi, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#ifdef CONFIG_DEBUG_STACKOVERFLOW > + { > + .procname = "panic_on_stackoverflow", > + .data = &sysctl_panic_on_stackoverflow, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > + { > + .procname = "bootloader_type", > + .data = &bootloader_type, > + .maxlen = sizeof (int), > + .mode = 0444, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "bootloader_version", > + .data = &bootloader_version, > + .maxlen = sizeof (int), > + .mode = 0444, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "io_delay_type", > + .data = &io_delay_type, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#if defined(CONFIG_MMU) > + { > + .procname = "randomize_va_space", > + .data = &randomize_va_space, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#if defined(CONFIG_S390) && defined(CONFIG_SMP) > + { > + .procname = "spin_retry", > + .data = &spin_retry, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#if defined(CONFIG_ACPI_SLEEP) && defined(CONFIG_X86) > + { > + .procname = "acpi_video_flags", > + .data = &acpi_realmode_flags, > + .maxlen = sizeof (unsigned long), > + .mode = 0644, > + .proc_handler = proc_doulongvec_minmax, > + }, > +#endif > +#ifdef CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN > + { > + .procname = "ignore-unaligned-usertrap", > + .data = &no_unaligned_warning, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#ifdef CONFIG_IA64 > + { > + .procname = "unaligned-dump-stack", > + .data = &unaligned_dump_stack, > + .maxlen = sizeof (int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > +#ifdef CONFIG_DETECT_HUNG_TASK > + { > + .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", > + .data = &max_lock_depth, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > + { > + .procname = "poweroff_cmd", > + .data = &poweroff_cmd, > + .maxlen = POWEROFF_CMD_PATH_LEN, > + .mode = 0644, > + .proc_handler = proc_dostring, > + }, > +#ifdef CONFIG_KEYS > + { > + .procname = "keys", > + .mode = 0555, > + .child = key_sysctls, > + }, > +#endif > +#ifdef CONFIG_PERF_EVENTS > + /* > + * 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! > + */ > + { > + .procname = "perf_event_paranoid", > + .data = &sysctl_perf_event_paranoid, > + .maxlen = sizeof(sysctl_perf_event_paranoid), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "perf_event_mlock_kb", > + .data = &sysctl_perf_event_mlock, > + .maxlen = sizeof(sysctl_perf_event_mlock), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "perf_event_max_sample_rate", > + .data = &sysctl_perf_event_sample_rate, > + .maxlen = sizeof(sysctl_perf_event_sample_rate), > + .mode = 0644, > + .proc_handler = perf_proc_update_handler, > + .extra1 = SYSCTL_ONE, > + }, > + { > + .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 = SYSCTL_ZERO, > + .extra2 = &one_hundred, > + }, > + { > + .procname = "perf_event_max_stack", > + .data = &sysctl_perf_event_max_stack, > + .maxlen = sizeof(sysctl_perf_event_max_stack), > + .mode = 0644, > + .proc_handler = perf_event_max_stack_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &six_hundred_forty_kb, > + }, > + { > + .procname = "perf_event_max_contexts_per_stack", > + .data = &sysctl_perf_event_max_contexts_per_stack, > + .maxlen = sizeof(sysctl_perf_event_max_contexts_per_stack), > + .mode = 0644, > + .proc_handler = perf_event_max_stack_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &one_thousand, > + }, > +#endif > + { > + .procname = "panic_on_warn", > + .data = &panic_on_warn, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) > + { > + .procname = "timer_migration", > + .data = &sysctl_timer_migration, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = timer_migration_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > +#ifdef CONFIG_BPF_SYSCALL > + { > + .procname = "unprivileged_bpf_disabled", > + .data = &sysctl_unprivileged_bpf_disabled, > + .maxlen = sizeof(sysctl_unprivileged_bpf_disabled), > + .mode = 0644, > + /* only handle a transition from default "0" to "1" */ > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ONE, > + .extra2 = SYSCTL_ONE, > + }, > + { > + .procname = "bpf_stats_enabled", > + .data = &bpf_stats_enabled_key.key, > + .maxlen = sizeof(bpf_stats_enabled_key), > + .mode = 0644, > + .proc_handler = proc_do_static_key, > + }, > +#endif > +#if defined(CONFIG_TREE_RCU) > + { > + .procname = "panic_on_rcu_stall", > + .data = &sysctl_panic_on_rcu_stall, > + .maxlen = sizeof(sysctl_panic_on_rcu_stall), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#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 > + { } > +}; > > -int proc_dointvec_ms_jiffies(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos) > -{ > - return -ENOSYS; > -} > +static struct ctl_table vm_table[] = { > + { > + .procname = "overcommit_memory", > + .data = &sysctl_overcommit_memory, > + .maxlen = sizeof(sysctl_overcommit_memory), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &two, > + }, > + { > + .procname = "panic_on_oom", > + .data = &sysctl_panic_on_oom, > + .maxlen = sizeof(sysctl_panic_on_oom), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &two, > + }, > + { > + .procname = "oom_kill_allocating_task", > + .data = &sysctl_oom_kill_allocating_task, > + .maxlen = sizeof(sysctl_oom_kill_allocating_task), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "oom_dump_tasks", > + .data = &sysctl_oom_dump_tasks, > + .maxlen = sizeof(sysctl_oom_dump_tasks), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "overcommit_ratio", > + .data = &sysctl_overcommit_ratio, > + .maxlen = sizeof(sysctl_overcommit_ratio), > + .mode = 0644, > + .proc_handler = overcommit_ratio_handler, > + }, > + { > + .procname = "overcommit_kbytes", > + .data = &sysctl_overcommit_kbytes, > + .maxlen = sizeof(sysctl_overcommit_kbytes), > + .mode = 0644, > + .proc_handler = overcommit_kbytes_handler, > + }, > + { > + .procname = "page-cluster", > + .data = &page_cluster, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + }, > + { > + .procname = "dirty_background_ratio", > + .data = &dirty_background_ratio, > + .maxlen = sizeof(dirty_background_ratio), > + .mode = 0644, > + .proc_handler = dirty_background_ratio_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &one_hundred, > + }, > + { > + .procname = "dirty_background_bytes", > + .data = &dirty_background_bytes, > + .maxlen = sizeof(dirty_background_bytes), > + .mode = 0644, > + .proc_handler = dirty_background_bytes_handler, > + .extra1 = &one_ul, > + }, > + { > + .procname = "dirty_ratio", > + .data = &vm_dirty_ratio, > + .maxlen = sizeof(vm_dirty_ratio), > + .mode = 0644, > + .proc_handler = dirty_ratio_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &one_hundred, > + }, > + { > + .procname = "dirty_bytes", > + .data = &vm_dirty_bytes, > + .maxlen = sizeof(vm_dirty_bytes), > + .mode = 0644, > + .proc_handler = dirty_bytes_handler, > + .extra1 = &dirty_bytes_min, > + }, > + { > + .procname = "dirty_writeback_centisecs", > + .data = &dirty_writeback_interval, > + .maxlen = sizeof(dirty_writeback_interval), > + .mode = 0644, > + .proc_handler = dirty_writeback_centisecs_handler, > + }, > + { > + .procname = "dirty_expire_centisecs", > + .data = &dirty_expire_interval, > + .maxlen = sizeof(dirty_expire_interval), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + }, > + { > + .procname = "dirtytime_expire_seconds", > + .data = &dirtytime_expire_interval, > + .maxlen = sizeof(dirtytime_expire_interval), > + .mode = 0644, > + .proc_handler = dirtytime_interval_handler, > + .extra1 = SYSCTL_ZERO, > + }, > + { > + .procname = "swappiness", > + .data = &vm_swappiness, > + .maxlen = sizeof(vm_swappiness), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &one_hundred, > + }, > +#ifdef CONFIG_HUGETLB_PAGE > + { > + .procname = "nr_hugepages", > + .data = NULL, > + .maxlen = sizeof(unsigned long), > + .mode = 0644, > + .proc_handler = hugetlb_sysctl_handler, > + }, > +#ifdef CONFIG_NUMA > + { > + .procname = "nr_hugepages_mempolicy", > + .data = NULL, > + .maxlen = sizeof(unsigned long), > + .mode = 0644, > + .proc_handler = &hugetlb_mempolicy_sysctl_handler, > + }, > + { > + .procname = "numa_stat", > + .data = &sysctl_vm_numa_stat, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = sysctl_vm_numa_stat_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > + { > + .procname = "hugetlb_shm_group", > + .data = &sysctl_hugetlb_shm_group, > + .maxlen = sizeof(gid_t), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > + .procname = "nr_overcommit_hugepages", > + .data = NULL, > + .maxlen = sizeof(unsigned long), > + .mode = 0644, > + .proc_handler = hugetlb_overcommit_handler, > + }, > +#endif > + { > + .procname = "lowmem_reserve_ratio", > + .data = &sysctl_lowmem_reserve_ratio, > + .maxlen = sizeof(sysctl_lowmem_reserve_ratio), > + .mode = 0644, > + .proc_handler = lowmem_reserve_ratio_sysctl_handler, > + }, > + { > + .procname = "drop_caches", > + .data = &sysctl_drop_caches, > + .maxlen = sizeof(int), > + .mode = 0200, > + .proc_handler = drop_caches_sysctl_handler, > + .extra1 = SYSCTL_ONE, > + .extra2 = &four, > + }, > +#ifdef CONFIG_COMPACTION > + { > + .procname = "compact_memory", > + .data = &sysctl_compact_memory, > + .maxlen = sizeof(int), > + .mode = 0200, > + .proc_handler = sysctl_compaction_handler, > + }, > + { > + .procname = "extfrag_threshold", > + .data = &sysctl_extfrag_threshold, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = &min_extfrag_threshold, > + .extra2 = &max_extfrag_threshold, > + }, > + { > + .procname = "compact_unevictable_allowed", > + .data = &sysctl_compact_unevictable_allowed, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax_warn_RT_change, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > + > +#endif /* CONFIG_COMPACTION */ > + { > + .procname = "min_free_kbytes", > + .data = &min_free_kbytes, > + .maxlen = sizeof(min_free_kbytes), > + .mode = 0644, > + .proc_handler = min_free_kbytes_sysctl_handler, > + .extra1 = SYSCTL_ZERO, > + }, > + { > + .procname = "watermark_boost_factor", > + .data = &watermark_boost_factor, > + .maxlen = sizeof(watermark_boost_factor), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + }, > + { > + .procname = "watermark_scale_factor", > + .data = &watermark_scale_factor, > + .maxlen = sizeof(watermark_scale_factor), > + .mode = 0644, > + .proc_handler = watermark_scale_factor_sysctl_handler, > + .extra1 = SYSCTL_ONE, > + .extra2 = &one_thousand, > + }, > + { > + .procname = "percpu_pagelist_fraction", > + .data = &percpu_pagelist_fraction, > + .maxlen = sizeof(percpu_pagelist_fraction), > + .mode = 0644, > + .proc_handler = percpu_pagelist_fraction_sysctl_handler, > + .extra1 = SYSCTL_ZERO, > + }, > +#ifdef CONFIG_MMU > + { > + .procname = "max_map_count", > + .data = &sysctl_max_map_count, > + .maxlen = sizeof(sysctl_max_map_count), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + }, > +#else > + { > + .procname = "nr_trim_pages", > + .data = &sysctl_nr_trim_pages, > + .maxlen = sizeof(sysctl_nr_trim_pages), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + }, > +#endif > + { > + .procname = "laptop_mode", > + .data = &laptop_mode, > + .maxlen = sizeof(laptop_mode), > + .mode = 0644, > + .proc_handler = proc_dointvec_jiffies, > + }, > + { > + .procname = "block_dump", > + .data = &block_dump, > + .maxlen = sizeof(block_dump), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + .extra1 = SYSCTL_ZERO, > + }, > + { > + .procname = "vfs_cache_pressure", > + .data = &sysctl_vfs_cache_pressure, > + .maxlen = sizeof(sysctl_vfs_cache_pressure), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + .extra1 = SYSCTL_ZERO, > + }, > +#if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \ > + defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT) > + { > + .procname = "legacy_va_layout", > + .data = &sysctl_legacy_va_layout, > + .maxlen = sizeof(sysctl_legacy_va_layout), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + .extra1 = SYSCTL_ZERO, > + }, > +#endif > +#ifdef CONFIG_NUMA > + { > + .procname = "zone_reclaim_mode", > + .data = &node_reclaim_mode, > + .maxlen = sizeof(node_reclaim_mode), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + .extra1 = SYSCTL_ZERO, > + }, > + { > + .procname = "min_unmapped_ratio", > + .data = &sysctl_min_unmapped_ratio, > + .maxlen = sizeof(sysctl_min_unmapped_ratio), > + .mode = 0644, > + .proc_handler = sysctl_min_unmapped_ratio_sysctl_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &one_hundred, > + }, > + { > + .procname = "min_slab_ratio", > + .data = &sysctl_min_slab_ratio, > + .maxlen = sizeof(sysctl_min_slab_ratio), > + .mode = 0644, > + .proc_handler = sysctl_min_slab_ratio_sysctl_handler, > + .extra1 = SYSCTL_ZERO, > + .extra2 = &one_hundred, > + }, > +#endif > +#ifdef CONFIG_SMP > + { > + .procname = "stat_interval", > + .data = &sysctl_stat_interval, > + .maxlen = sizeof(sysctl_stat_interval), > + .mode = 0644, > + .proc_handler = proc_dointvec_jiffies, > + }, > + { > + .procname = "stat_refresh", > + .data = NULL, > + .maxlen = 0, > + .mode = 0600, > + .proc_handler = vmstat_refresh, > + }, > +#endif > +#ifdef CONFIG_MMU > + { > + .procname = "mmap_min_addr", > + .data = &dac_mmap_min_addr, > + .maxlen = sizeof(unsigned long), > + .mode = 0644, > + .proc_handler = mmap_min_addr_handler, > + }, > +#endif > +#ifdef CONFIG_NUMA > + { > + .procname = "numa_zonelist_order", > + .data = &numa_zonelist_order, > + .maxlen = NUMA_ZONELIST_ORDER_LEN, > + .mode = 0644, > + .proc_handler = numa_zonelist_order_handler, > + }, > +#endif > +#if (defined(CONFIG_X86_32) && !defined(CONFIG_UML))|| \ > + (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL)) > + { > + .procname = "vdso_enabled", > +#ifdef CONFIG_X86_32 > + .data = &vdso32_enabled, > + .maxlen = sizeof(vdso32_enabled), > +#else > + .data = &vdso_enabled, > + .maxlen = sizeof(vdso_enabled), > +#endif > + .mode = 0644, > + .proc_handler = proc_dointvec, > + .extra1 = SYSCTL_ZERO, > + }, > +#endif > +#ifdef CONFIG_HIGHMEM > + { > + .procname = "highmem_is_dirtyable", > + .data = &vm_highmem_is_dirtyable, > + .maxlen = sizeof(vm_highmem_is_dirtyable), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > +#ifdef CONFIG_MEMORY_FAILURE > + { > + .procname = "memory_failure_early_kill", > + .data = &sysctl_memory_failure_early_kill, > + .maxlen = sizeof(sysctl_memory_failure_early_kill), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > + { > + .procname = "memory_failure_recovery", > + .data = &sysctl_memory_failure_recovery, > + .maxlen = sizeof(sysctl_memory_failure_recovery), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > + { > + .procname = "user_reserve_kbytes", > + .data = &sysctl_user_reserve_kbytes, > + .maxlen = sizeof(sysctl_user_reserve_kbytes), > + .mode = 0644, > + .proc_handler = proc_doulongvec_minmax, > + }, > + { > + .procname = "admin_reserve_kbytes", > + .data = &sysctl_admin_reserve_kbytes, > + .maxlen = sizeof(sysctl_admin_reserve_kbytes), > + .mode = 0644, > + .proc_handler = proc_doulongvec_minmax, > + }, > +#ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS > + { > + .procname = "mmap_rnd_bits", > + .data = &mmap_rnd_bits, > + .maxlen = sizeof(mmap_rnd_bits), > + .mode = 0600, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = (void *)&mmap_rnd_bits_min, > + .extra2 = (void *)&mmap_rnd_bits_max, > + }, > +#endif > +#ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS > + { > + .procname = "mmap_rnd_compat_bits", > + .data = &mmap_rnd_compat_bits, > + .maxlen = sizeof(mmap_rnd_compat_bits), > + .mode = 0600, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = (void *)&mmap_rnd_compat_bits_min, > + .extra2 = (void *)&mmap_rnd_compat_bits_max, > + }, > +#endif > +#ifdef CONFIG_USERFAULTFD > + { > + .procname = "unprivileged_userfaultfd", > + .data = &sysctl_unprivileged_userfaultfd, > + .maxlen = sizeof(sysctl_unprivileged_userfaultfd), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE, > + }, > +#endif > + { } > +}; > > -int proc_doulongvec_minmax(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos) > -{ > - return -ENOSYS; > -} > +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_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, > + }, > + { } > +}; > > -int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write, > - void __user *buffer, > - size_t *lenp, loff_t *ppos) > -{ > - return -ENOSYS; > -} > +static struct ctl_table debug_table[] = { > +#ifdef CONFIG_SYSCTL_EXCEPTION_TRACE > + { > + .procname = "exception-trace", > + .data = &show_unhandled_signals, > + .maxlen = sizeof(int), > + .mode = 0644, > + .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 > + { } > +}; > > -int proc_do_large_bitmap(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, loff_t *ppos) > -{ > - return -ENOSYS; > -} > +static struct ctl_table dev_table[] = { > + { } > +}; > > -#endif /* CONFIG_PROC_SYSCTL */ > +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, > + }, > + { } > +}; > > -#if defined(CONFIG_SYSCTL) > -int proc_do_static_key(struct ctl_table *table, int write, > - void __user *buffer, size_t *lenp, > - loff_t *ppos) > +int __init sysctl_init(void) > { > - struct static_key *key = (struct static_key *)table->data; > - static DEFINE_MUTEX(static_key_mutex); > - int val, ret; > - struct ctl_table tmp = { > - .data = &val, > - .maxlen = sizeof(val), > - .mode = table->mode, > - .extra1 = SYSCTL_ZERO, > - .extra2 = SYSCTL_ONE, > - }; > - > - if (write && !capable(CAP_SYS_ADMIN)) > - return -EPERM; > + struct ctl_table_header *hdr; > > - mutex_lock(&static_key_mutex); > - val = static_key_enabled(key); > - ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos); > - if (write && !ret) { > - if (val) > - static_key_enable(key); > - else > - static_key_disable(key); > - } > - mutex_unlock(&static_key_mutex); > - return ret; > + hdr = register_sysctl_table(sysctl_base_table); > + kmemleak_not_leak(hdr); > + return 0; > } > -#endif > +#endif /* CONFIG_SYSCTL */ > /* > * No sense putting this after each symbol definition, twice, > * exception granted :-) > -- > 2.26.1 > -- Kees Cook