aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/security.h
diff options
context:
space:
mode:
authorKees Cook <kees.cook@canonical.com>2010-02-03 18:36:43 -0500
committerJames Morris <jmorris@namei.org>2010-02-03 22:20:12 -0500
commit002345925e6c45861f60db6f4fc6236713fd8847 (patch)
treed7849eafe1755116597166bbebf43e2bee86cb76 /include/linux/security.h
parent0719aaf5ead7555b7b7a4a080ebf2826a871384e (diff)
syslog: distinguish between /proc/kmsg and syscalls
This allows the LSM to distinguish between syslog functions originating from /proc/kmsg access and direct syscalls. By default, the commoncaps will now no longer require CAP_SYS_ADMIN to read an opened /proc/kmsg file descriptor. For example the kernel syslog reader can now drop privileges after opening /proc/kmsg, instead of staying privileged with CAP_SYS_ADMIN. MAC systems that implement security_syslog have unchanged behavior. Signed-off-by: Kees Cook <kees.cook@canonical.com> Acked-by: Serge Hallyn <serue@us.ibm.com> Acked-by: John Johansen <john.johansen@canonical.com> Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'include/linux/security.h')
-rw-r--r--include/linux/security.h11
1 files changed, 6 insertions, 5 deletions
diff --git a/include/linux/security.h b/include/linux/security.h
index 26eca85b2417..a4dc74d86ac6 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -76,7 +76,7 @@ extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
76extern int cap_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp); 76extern int cap_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp);
77extern int cap_task_setioprio(struct task_struct *p, int ioprio); 77extern int cap_task_setioprio(struct task_struct *p, int ioprio);
78extern int cap_task_setnice(struct task_struct *p, int nice); 78extern int cap_task_setnice(struct task_struct *p, int nice);
79extern int cap_syslog(int type); 79extern int cap_syslog(int type, bool from_file);
80extern int cap_vm_enough_memory(struct mm_struct *mm, long pages); 80extern int cap_vm_enough_memory(struct mm_struct *mm, long pages);
81 81
82struct msghdr; 82struct msghdr;
@@ -1349,6 +1349,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
1349 * logging to the console. 1349 * logging to the console.
1350 * See the syslog(2) manual page for an explanation of the @type values. 1350 * See the syslog(2) manual page for an explanation of the @type values.
1351 * @type contains the type of action. 1351 * @type contains the type of action.
1352 * @from_file indicates the context of action (if it came from /proc).
1352 * Return 0 if permission is granted. 1353 * Return 0 if permission is granted.
1353 * @settime: 1354 * @settime:
1354 * Check permission to change the system time. 1355 * Check permission to change the system time.
@@ -1463,7 +1464,7 @@ struct security_operations {
1463 int (*sysctl) (struct ctl_table *table, int op); 1464 int (*sysctl) (struct ctl_table *table, int op);
1464 int (*quotactl) (int cmds, int type, int id, struct super_block *sb); 1465 int (*quotactl) (int cmds, int type, int id, struct super_block *sb);
1465 int (*quota_on) (struct dentry *dentry); 1466 int (*quota_on) (struct dentry *dentry);
1466 int (*syslog) (int type); 1467 int (*syslog) (int type, bool from_file);
1467 int (*settime) (struct timespec *ts, struct timezone *tz); 1468 int (*settime) (struct timespec *ts, struct timezone *tz);
1468 int (*vm_enough_memory) (struct mm_struct *mm, long pages); 1469 int (*vm_enough_memory) (struct mm_struct *mm, long pages);
1469 1470
@@ -1762,7 +1763,7 @@ int security_acct(struct file *file);
1762int security_sysctl(struct ctl_table *table, int op); 1763int security_sysctl(struct ctl_table *table, int op);
1763int security_quotactl(int cmds, int type, int id, struct super_block *sb); 1764int security_quotactl(int cmds, int type, int id, struct super_block *sb);
1764int security_quota_on(struct dentry *dentry); 1765int security_quota_on(struct dentry *dentry);
1765int security_syslog(int type); 1766int security_syslog(int type, bool from_file);
1766int security_settime(struct timespec *ts, struct timezone *tz); 1767int security_settime(struct timespec *ts, struct timezone *tz);
1767int security_vm_enough_memory(long pages); 1768int security_vm_enough_memory(long pages);
1768int security_vm_enough_memory_mm(struct mm_struct *mm, long pages); 1769int security_vm_enough_memory_mm(struct mm_struct *mm, long pages);
@@ -2008,9 +2009,9 @@ static inline int security_quota_on(struct dentry *dentry)
2008 return 0; 2009 return 0;
2009} 2010}
2010 2011
2011static inline int security_syslog(int type) 2012static inline int security_syslog(int type, bool from_file)
2012{ 2013{
2013 return cap_syslog(type); 2014 return cap_syslog(type, from_file);
2014} 2015}
2015 2016
2016static inline int security_settime(struct timespec *ts, struct timezone *tz) 2017static inline int security_settime(struct timespec *ts, struct timezone *tz)