1 // SPDX-License-Identifier: GPL-2.0-only
3 * sysctl.c: General linux system control interface
6 #include <linux/sysctl.h>
7 #include <linux/printk.h>
8 #include <linux/capability.h>
9 #include <linux/ratelimit.h>
12 static const int ten_thousand
= 10000;
14 static int proc_dointvec_minmax_sysadmin(const struct ctl_table
*table
, int write
,
15 void *buffer
, size_t *lenp
, loff_t
*ppos
)
17 if (write
&& !capable(CAP_SYS_ADMIN
))
20 return proc_dointvec_minmax(table
, write
, buffer
, lenp
, ppos
);
23 static struct ctl_table printk_sysctls
[] = {
26 .data
= &console_loglevel
,
27 .maxlen
= 4*sizeof(int),
29 .proc_handler
= proc_dointvec
,
32 .procname
= "printk_ratelimit",
33 .data
= &printk_ratelimit_state
.interval
,
34 .maxlen
= sizeof(int),
36 .proc_handler
= proc_dointvec_jiffies
,
39 .procname
= "printk_ratelimit_burst",
40 .data
= &printk_ratelimit_state
.burst
,
41 .maxlen
= sizeof(int),
43 .proc_handler
= proc_dointvec
,
46 .procname
= "printk_delay",
47 .data
= &printk_delay_msec
,
48 .maxlen
= sizeof(int),
50 .proc_handler
= proc_dointvec_minmax
,
51 .extra1
= SYSCTL_ZERO
,
52 .extra2
= (void *)&ten_thousand
,
55 .procname
= "printk_devkmsg",
56 .data
= devkmsg_log_str
,
57 .maxlen
= DEVKMSG_STR_MAX_SIZE
,
59 .proc_handler
= devkmsg_sysctl_set_loglvl
,
62 .procname
= "dmesg_restrict",
63 .data
= &dmesg_restrict
,
64 .maxlen
= sizeof(int),
66 .proc_handler
= proc_dointvec_minmax_sysadmin
,
67 .extra1
= SYSCTL_ZERO
,
71 .procname
= "kptr_restrict",
72 .data
= &kptr_restrict
,
73 .maxlen
= sizeof(int),
75 .proc_handler
= proc_dointvec_minmax_sysadmin
,
76 .extra1
= SYSCTL_ZERO
,
81 void __init
printk_sysctl_init(void)
83 register_sysctl_init("kernel", printk_sysctls
);