diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-11-29 07:44:01 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-11-29 07:44:01 +0100 |
commit | ca19e77e44985b5500f5461f7d2f4ce799cb60ce (patch) | |
tree | 3ba3635ac2f212b332198b14cc3239195c153e67 /kernel/printk.c | |
parent | 9d57883f08d3c0c111b50bf185dfee9731a12c76 (diff) | |
parent | ac70eb1305d5a81efd1e32327d7e79be15a63a5a (diff) |
Merge branch 'fix/hda' into topic/hda
Diffstat (limited to 'kernel/printk.c')
-rw-r--r-- | kernel/printk.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index b2ebaee8c37..9a2264fc42c 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -261,6 +261,12 @@ static inline void boot_delay_msec(void) } #endif +#ifdef CONFIG_SECURITY_DMESG_RESTRICT +int dmesg_restrict = 1; +#else +int dmesg_restrict; +#endif + int do_syslog(int type, char __user *buf, int len, bool from_file) { unsigned i, j, limit, count; @@ -268,7 +274,20 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) char c; int error = 0; - error = security_syslog(type, from_file); + /* + * If this is from /proc/kmsg we only do the capabilities checks + * at open time. + */ + if (type == SYSLOG_ACTION_OPEN || !from_file) { + if (dmesg_restrict && !capable(CAP_SYS_ADMIN)) + return -EPERM; + if ((type != SYSLOG_ACTION_READ_ALL && + type != SYSLOG_ACTION_SIZE_BUFFER) && + !capable(CAP_SYS_ADMIN)) + return -EPERM; + } + + error = security_syslog(type); if (error) return error; |