/* * sysctl.c: General linux system control interface * * Begun 24 March 1995, Stephen Tweedie * Added /proc support, Dec 1995 * Added bdflush entry and intvec min/max checking, 2/23/96, Tom Dyas. * Added hooks for /proc/sys/net (minor, minor patch), 96/4/1, Mike Shaver. * Added kernel/java-{interpreter,appletviewer}, 96/5/10, Mike Shaver. * Dynamic registration fixes, Stephen Tweedie. * Added kswapd-interval, ctrl-alt-del, printk stuff, 1/8/97, Chris Horn. * Made sysctl support optional via CONFIG_SYSCTL, 1/10/97, Chris * Horn. * Added proc_doulongvec_ms_jiffies_minmax, 09/08/99, Carlos H. Bauer. * Added proc_doulongvec_minmax, 09/08/99, Carlos H. Bauer. * Changed linked lists to use list.h instead of lists.h, 02/24/00, Bill * Wendling. * The list_for_each() macro wasn't appropriate for the sysctl loop. * Removed it and replaced it with older style, 03/23/00, Bill Wendling */ #include <linux/config.h>#include <linux/module.h>#include <linux/mm.h>#include <linux/swap.h>#include <linux/slab.h>#include <linux/sysctl.h>#include <linux/proc_fs.h>#include <linux/ctype.h>#include <linux/utsname.h>#include <linux/capability.h>#include <linux/smp_lock.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/net.h>#include <linux/sysrq.h>#include <linux/highuid.h>#include <linux/writeback.h>#include <linux/hugetlb.h>#include <linux/security.h>#include <linux/initrd.h>#include <linux/times.h>#include <linux/limits.h>#include <linux/dcache.h>#include <linux/syscalls.h> #include <asm/uaccess.h>#include <asm/processor.h> #ifdef CONFIG_ROOT_NFS#include <linux/nfs_fs.h>#endif #if defined(CONFIG_SYSCTL) /* External variables not in a header file. */extern int C_A_D;extern int sysctl_overcommit_memory;extern int sysctl_overcommit_ratio;extern int max_threads;extern int sysrq_enabled;extern int core_uses_pid;extern int suid_dumpable;extern char core_pattern[];extern int cad_pid;extern int pid_max;extern int min_free_kbytes;extern int printk_ratelimit_jiffies;extern int printk_ratelimit_burst;extern int pid_max_min, pid_max_max; #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86)int unknown_nmi_panic;extern int proc_unknown_nmi_panic(ctl_table *, int, struct file *, void __user *, size_t *, loff_t *);#endif /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */static int maxolduid = 65535;static int minolduid; static int ngroups_max = NGROUPS_MAX; #ifdef CONFIG_KMODextern char modprobe_path[];#endif#ifdef CONFIG_HOTPLUGextern char hotplug_path[];#endif#ifdef CONFIG_CHR_DEV_SGextern int sg_big_buff;#endif#ifdef CONFIG_SYSVIPCextern size_t shm_ctlmax;extern size_t shm_ctlall;extern int shm_ctlmni;extern int msg_ctlmax;extern int msg_ctlmnb;extern int msg_ctlmni;extern int sem_ctls[];#endif #ifdef __sparc__extern char reboot_command [];extern int stop_a_enabled;extern int scons_pwroff;#endif #ifdef __hppa__extern int pwrsw_enabled;extern int unaligned_enabled;#endif #ifdef CONFIG_ARCH_S390#ifdef CONFIG_MATHEMUextern int sysctl_ieee_emulation_warnings;#endifextern int sysctl_userprocess_debug;extern int spin_retry;#endif extern int sysctl_hz_timer; #ifdef CONFIG_BSD_PROCESS_ACCTextern int acct_parm[];#endif int randomize_va_space = 1; static int parse_table(int __user *, int, void __user *, size_t __user *, void __user *, size_t, ctl_table *, void **);static int proc_doutsstring(ctl_table *table, int write, struct file *filp, void __user *buffer, size_t *lenp, loff_t *ppos); static ctl_table root_table[];static struct ctl_table_header root_table_header = { root_table, LIST_HEAD_INIT(root_table_header.ctl_entry) }; static ctl_table kern_table[];static ctl_table vm_table[];static ctl_table proc_table[];static ctl_table fs_table[];static ctl_table debug_table[];static ctl_table dev_table[];extern ctl_table random_table[];#ifdef CONFIG_UNIX98_PTYSextern ctl_table pty_table[];#endif#ifdef CONFIG_INOTIFYextern ctl_table inotify_table[];#endif #ifdef HAVE_ARCH_PICK_MMAP_LAYOUTint sysctl_legacy_va_layout;#endif /* /proc declarations: */ #ifdef CONFIG_PROC_FS static ssize_t proc_readsys(struct file *, char __user *, size_t, loff_t *);static ssize_t proc_writesys(struct file *, const char __user *, size_t, loff_t *);static int proc_opensys(struct inode *, struct file *); struct file_operations proc_sys_file_operations = { .open = proc_opensys, .read = proc_readsys, .write = proc_writesys,}; extern struct proc_dir_entry *proc_sys_root; static void register_proc_table(ctl_table *, struct proc_dir_entry *, void *);static void unregister_proc_table(ctl_table *, struct proc_dir_entry *);#endif /* The default sysctl tables: */ static ctl_table root_table[] = { { .ctl_name = CTL_KERN, .procname = "kernel", .mode = 0555, .child = kern_table, }, { .ctl_name = CTL_VM, .procname = "vm", .mode = 0555, .child = vm_table, },#ifdef CONFIG_NET { .ctl_name = CTL_NET, .procname = "net", .mode = 0555, .child = net_table, },#endif { .ctl_name = CTL_PROC, .procname = "proc", .mode = 0555, .child = proc_table, }, { .ctl_name = CTL_FS, .procname = "fs", .mode = 0555, .child = fs_table, }, { .ctl_name = CTL_DEBUG, .procname = "debug", .mode = 0555, .child = debug_table, }, { .ctl_name = CTL_DEV, .procname = "dev", .mode = 0555, .child = dev_table, }, { .ctl_name = 0 }}; static ctl_table kern_table[] = { { .ctl_name = KERN_OSTYPE, .procname = "ostype", .data = system_utsname.sysname, .maxlen = sizeof(system_utsname.sysname), .mode = 0444, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_OSRELEASE, .procname = "osrelease", .data = system_utsname.release, .maxlen = sizeof(system_utsname.release), .mode = 0444, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_VERSION, .procname = "version", .data = system_utsname.version, .maxlen = sizeof(system_utsname.version), .mode = 0444, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_NODENAME, .procname = "hostname", .data = system_utsname.nodename, .maxlen = sizeof(system_utsname.nodename), .mode = 0644, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_DOMAINNAME, .procname = "domainname", .data = system_utsname.domainname, .maxlen = sizeof(system_utsname.domainname), .mode = 0644, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_PANIC, .procname = "panic", .data = &panic_timeout, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_CORE_USES_PID, .procname = "core_uses_pid", .data = &core_uses_pid, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_CORE_PATTERN, .procname = "core_pattern", .data = core_pattern, .maxlen = 64, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, }, { .ctl_name = KERN_TAINTED, .procname = "tainted", .data = &tainted, .maxlen = sizeof(int), .mode = 0444, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_CAP_BSET, .procname = "cap-bound", .data = &cap_bset, .maxlen = sizeof(kernel_cap_t), .mode = 0600, .proc_handler = &proc_dointvec_bset, },#ifdef CONFIG_BLK_DEV_INITRD { .ctl_name = KERN_REALROOTDEV, .procname = "real-root-dev", .data = &real_root_dev, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, },#endif#ifdef __sparc__ { .ctl_name = KERN_SPARC_REBOOT, .procname = "reboot-cmd", .data = reboot_command, .maxlen = 256, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, }, { .ctl_name = KERN_SPARC_STOP_A, .procname = "stop-a", .data = &stop_a_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_SPARC_SCONS_PWROFF, .procname = "scons-poweroff", .data = &scons_pwroff, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, },#endif#ifdef __hppa__ { .ctl_name = KERN_HPPA_PWRSW, .procname = "soft-power", .data = &pwrsw_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_HPPA_UNALIGNED, .procname = "unaligned-trap", .data = &unaligned_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, },#endif { .ctl_name = KERN_CTLALTDEL, .procname = "ctrl-alt-del", .data = &C_A_D, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_PRINTK, .procname = "printk", .data = &console_loglevel, .maxlen = 4*sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, },#ifdef CONFIG_KMOD { .ctl_name = KERN_MODPROBE, .procname = "modprobe", .data = &modprobe_path, .maxlen = KMOD_PATH_LEN, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, },#endif#ifdef CONFIG_HOTPLUG { .ctl_name = KERN_HOTPLUG, .procname = "hotplug", .data = &hotplug_path, .maxlen = HOTPLUG_PATH_LEN, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, },#endif#ifdef CONFIG_CHR_DEV_SG { .ctl_name = KERN_SG_BIG_BUFF, .procname = "sg-big-buff", .data = &sg_big_buff, .maxlen = sizeof (int), .mode = 0444, .proc_handler = &proc_dointvec, },#endif#ifdef CONFIG_BSD_PROCESS_ACCT { .ctl_name = KERN_ACCT, .procname = "acct", .data = &acct_parm, .maxlen = 3*sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, },#endif#ifdef CONFIG_SYSVIPC { .ctl_name = KERN_SHMMAX, .procname = "shmmax", .data = &shm_ctlmax, .maxlen = sizeof (size_t), .mode = 0644, .proc_handler = &proc_doulongvec_minmax, }, { .ctl_name = KERN_SHMALL, .procname = "shmall", .data = &shm_ctlall, .maxlen = sizeof (size_t), .mode = 0644, .proc_handler = &proc_doulongvec_minmax, }, { .ctl_name = KERN_SHMMNI, .procname = "shmmni", .data = &shm_ctlmni, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_MSGMAX, .procname = "msgmax", .data = &msg_ctlmax, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_MSGMNI, .procname = "msgmni", .data = &msg_ctlmni, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_MSGMNB, .procname = "msgmnb", .data = &msg_ctlmnb, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_SEM, .procname = "sem", .data = &sem_ctls, .maxlen = 4*sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, },#endif#ifdef CONFIG_MAGIC_SYSRQ { .ctl_name = KERN_SYSRQ, .procname = "sysrq", .data = &sysrq_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, },#endif { .ctl_name = KERN_CADPID, .procname = "cad_pid", .data = &cad_pid, .maxlen = sizeof (int), .mode = 0600,Lines 1–500 of 2449. Load more
/* * sysctl.c: General linux system control interface * * Begun 24 March 1995, Stephen Tweedie * Added /proc support, Dec 1995 * Added bdflush entry and intvec min/max checking, 2/23/96, Tom Dyas. * Added hooks for /proc/sys/net (minor, minor patch), 96/4/1, Mike Shaver. * Added kernel/java-{interpreter,appletviewer}, 96/5/10, Mike Shaver. * Dynamic registration fixes, Stephen Tweedie. * Added kswapd-interval, ctrl-alt-del, printk stuff, 1/8/97, Chris Horn. * Made sysctl support optional via CONFIG_SYSCTL, 1/10/97, Chris * Horn. * Added proc_doulongvec_ms_jiffies_minmax, 09/08/99, Carlos H. Bauer. * Added proc_doulongvec_minmax, 09/08/99, Carlos H. Bauer. * Changed linked lists to use list.h instead of lists.h, 02/24/00, Bill * Wendling. * The list_for_each() macro wasn't appropriate for the sysctl loop. * Removed it and replaced it with older style, 03/23/00, Bill Wendling */ #include <linux/config.h> #include <linux/module.h> #include <linux/mm.h> #include <linux/swap.h> #include <linux/slab.h> #include <linux/sysctl.h> #include <linux/proc_fs.h> #include <linux/ctype.h> #include <linux/utsname.h> #include <linux/capability.h> #include <linux/smp_lock.h> #include <linux/init.h> #include <linux/kernel.h> #include <linux/net.h> #include <linux/sysrq.h> #include <linux/highuid.h> #include <linux/writeback.h> #include <linux/hugetlb.h> #include <linux/security.h> #include <linux/initrd.h> #include <linux/times.h> #include <linux/limits.h> #include <linux/dcache.h> #include <linux/syscalls.h> #include <asm/uaccess.h> #include <asm/processor.h> #ifdef CONFIG_ROOT_NFS #include <linux/nfs_fs.h> #endif #if defined(CONFIG_SYSCTL) /* External variables not in a header file. */ extern int C_A_D; extern int sysctl_overcommit_memory; extern int sysctl_overcommit_ratio; extern int max_threads; extern int sysrq_enabled; extern int core_uses_pid; extern int suid_dumpable; extern char core_pattern[]; extern int cad_pid; extern int pid_max; extern int min_free_kbytes; extern int printk_ratelimit_jiffies; extern int printk_ratelimit_burst; extern int pid_max_min, pid_max_max; #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86) int unknown_nmi_panic; extern int proc_unknown_nmi_panic(ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); #endif /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ static int maxolduid = 65535; static int minolduid; static int ngroups_max = NGROUPS_MAX; #ifdef CONFIG_KMOD extern char modprobe_path[]; #endif #ifdef CONFIG_HOTPLUG extern char hotplug_path[]; #endif #ifdef CONFIG_CHR_DEV_SG extern int sg_big_buff; #endif #ifdef CONFIG_SYSVIPC extern size_t shm_ctlmax; extern size_t shm_ctlall; extern int shm_ctlmni; extern int msg_ctlmax; extern int msg_ctlmnb; extern int msg_ctlmni; extern int sem_ctls[]; #endif #ifdef __sparc__ extern char reboot_command []; extern int stop_a_enabled; extern int scons_pwroff; #endif #ifdef __hppa__ extern int pwrsw_enabled; extern int unaligned_enabled; #endif #ifdef CONFIG_ARCH_S390 #ifdef CONFIG_MATHEMU extern int sysctl_ieee_emulation_warnings; #endif extern int sysctl_userprocess_debug; extern int spin_retry; #endif extern int sysctl_hz_timer; #ifdef CONFIG_BSD_PROCESS_ACCT extern int acct_parm[]; #endif int randomize_va_space = 1; static int parse_table(int __user *, int, void __user *, size_t __user *, void __user *, size_t, ctl_table *, void **); static int proc_doutsstring(ctl_table *table, int write, struct file *filp, void __user *buffer, size_t *lenp, loff_t *ppos); static ctl_table root_table[]; static struct ctl_table_header root_table_header = { root_table, LIST_HEAD_INIT(root_table_header.ctl_entry) }; static ctl_table kern_table[]; static ctl_table vm_table[]; static ctl_table proc_table[]; static ctl_table fs_table[]; static ctl_table debug_table[]; static ctl_table dev_table[]; extern ctl_table random_table[]; #ifdef CONFIG_UNIX98_PTYS extern ctl_table pty_table[]; #endif #ifdef CONFIG_INOTIFY extern ctl_table inotify_table[]; #endif #ifdef HAVE_ARCH_PICK_MMAP_LAYOUT int sysctl_legacy_va_layout; #endif /* /proc declarations: */ #ifdef CONFIG_PROC_FS static ssize_t proc_readsys(struct file *, char __user *, size_t, loff_t *); static ssize_t proc_writesys(struct file *, const char __user *, size_t, loff_t *); static int proc_opensys(struct inode *, struct file *); struct file_operations proc_sys_file_operations = { .open = proc_opensys, .read = proc_readsys, .write = proc_writesys, }; extern struct proc_dir_entry *proc_sys_root; static void register_proc_table(ctl_table *, struct proc_dir_entry *, void *); static void unregister_proc_table(ctl_table *, struct proc_dir_entry *); #endif /* The default sysctl tables: */ static ctl_table root_table[] = { { .ctl_name = CTL_KERN, .procname = "kernel", .mode = 0555, .child = kern_table, }, { .ctl_name = CTL_VM, .procname = "vm", .mode = 0555, .child = vm_table, }, #ifdef CONFIG_NET { .ctl_name = CTL_NET, .procname = "net", .mode = 0555, .child = net_table, }, #endif { .ctl_name = CTL_PROC, .procname = "proc", .mode = 0555, .child = proc_table, }, { .ctl_name = CTL_FS, .procname = "fs", .mode = 0555, .child = fs_table, }, { .ctl_name = CTL_DEBUG, .procname = "debug", .mode = 0555, .child = debug_table, }, { .ctl_name = CTL_DEV, .procname = "dev", .mode = 0555, .child = dev_table, }, { .ctl_name = 0 } }; static ctl_table kern_table[] = { { .ctl_name = KERN_OSTYPE, .procname = "ostype", .data = system_utsname.sysname, .maxlen = sizeof(system_utsname.sysname), .mode = 0444, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_OSRELEASE, .procname = "osrelease", .data = system_utsname.release, .maxlen = sizeof(system_utsname.release), .mode = 0444, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_VERSION, .procname = "version", .data = system_utsname.version, .maxlen = sizeof(system_utsname.version), .mode = 0444, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_NODENAME, .procname = "hostname", .data = system_utsname.nodename, .maxlen = sizeof(system_utsname.nodename), .mode = 0644, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_DOMAINNAME, .procname = "domainname", .data = system_utsname.domainname, .maxlen = sizeof(system_utsname.domainname), .mode = 0644, .proc_handler = &proc_doutsstring, .strategy = &sysctl_string, }, { .ctl_name = KERN_PANIC, .procname = "panic", .data = &panic_timeout, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_CORE_USES_PID, .procname = "core_uses_pid", .data = &core_uses_pid, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_CORE_PATTERN, .procname = "core_pattern", .data = core_pattern, .maxlen = 64, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, }, { .ctl_name = KERN_TAINTED, .procname = "tainted", .data = &tainted, .maxlen = sizeof(int), .mode = 0444, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_CAP_BSET, .procname = "cap-bound", .data = &cap_bset, .maxlen = sizeof(kernel_cap_t), .mode = 0600, .proc_handler = &proc_dointvec_bset, }, #ifdef CONFIG_BLK_DEV_INITRD { .ctl_name = KERN_REALROOTDEV, .procname = "real-root-dev", .data = &real_root_dev, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, #endif #ifdef __sparc__ { .ctl_name = KERN_SPARC_REBOOT, .procname = "reboot-cmd", .data = reboot_command, .maxlen = 256, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, }, { .ctl_name = KERN_SPARC_STOP_A, .procname = "stop-a", .data = &stop_a_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_SPARC_SCONS_PWROFF, .procname = "scons-poweroff", .data = &scons_pwroff, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, #endif #ifdef __hppa__ { .ctl_name = KERN_HPPA_PWRSW, .procname = "soft-power", .data = &pwrsw_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_HPPA_UNALIGNED, .procname = "unaligned-trap", .data = &unaligned_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, #endif { .ctl_name = KERN_CTLALTDEL, .procname = "ctrl-alt-del", .data = &C_A_D, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_PRINTK, .procname = "printk", .data = &console_loglevel, .maxlen = 4*sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, #ifdef CONFIG_KMOD { .ctl_name = KERN_MODPROBE, .procname = "modprobe", .data = &modprobe_path, .maxlen = KMOD_PATH_LEN, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, }, #endif #ifdef CONFIG_HOTPLUG { .ctl_name = KERN_HOTPLUG, .procname = "hotplug", .data = &hotplug_path, .maxlen = HOTPLUG_PATH_LEN, .mode = 0644, .proc_handler = &proc_dostring, .strategy = &sysctl_string, }, #endif #ifdef CONFIG_CHR_DEV_SG { .ctl_name = KERN_SG_BIG_BUFF, .procname = "sg-big-buff", .data = &sg_big_buff, .maxlen = sizeof (int), .mode = 0444, .proc_handler = &proc_dointvec, }, #endif #ifdef CONFIG_BSD_PROCESS_ACCT { .ctl_name = KERN_ACCT, .procname = "acct", .data = &acct_parm, .maxlen = 3*sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec, }, #endif #ifdef CONFIG_SYSVIPC { .ctl_name = KERN_SHMMAX, .procname = "shmmax", .data = &shm_ctlmax, .maxlen = sizeof (size_t), .mode = 0644, .proc_handler = &proc_doulongvec_minmax, }, { .ctl_name = KERN_SHMALL, .procname = "shmall", .data = &shm_ctlall, .maxlen = sizeof (size_t), .mode = 0644, .proc_handler = &proc_doulongvec_minmax, }, { .ctl_name = KERN_SHMMNI, .procname = "shmmni", .data = &shm_ctlmni, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_MSGMAX, .procname = "msgmax", .data = &msg_ctlmax, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_MSGMNI, .procname = "msgmni", .data = &msg_ctlmni, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_MSGMNB, .procname = "msgmnb", .data = &msg_ctlmnb, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, { .ctl_name = KERN_SEM, .procname = "sem", .data = &sem_ctls, .maxlen = 4*sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, #endif #ifdef CONFIG_MAGIC_SYSRQ { .ctl_name = KERN_SYSRQ, .procname = "sysrq", .data = &sysrq_enabled, .maxlen = sizeof (int), .mode = 0644, .proc_handler = &proc_dointvec, }, #endif { .ctl_name = KERN_CADPID, .procname = "cad_pid", .data = &cad_pid, .maxlen = sizeof (int), .mode = 0600,