aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/security.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/security.h')
-rw-r--r--include/linux/security.h79
1 files changed, 46 insertions, 33 deletions
diff --git a/include/linux/security.h b/include/linux/security.h
index c642bb8b8f5a..ca02f1716736 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -25,6 +25,7 @@
25#include <linux/fs.h> 25#include <linux/fs.h>
26#include <linux/fsnotify.h> 26#include <linux/fsnotify.h>
27#include <linux/binfmts.h> 27#include <linux/binfmts.h>
28#include <linux/dcache.h>
28#include <linux/signal.h> 29#include <linux/signal.h>
29#include <linux/resource.h> 30#include <linux/resource.h>
30#include <linux/sem.h> 31#include <linux/sem.h>
@@ -46,14 +47,15 @@
46 47
47struct ctl_table; 48struct ctl_table;
48struct audit_krule; 49struct audit_krule;
50struct user_namespace;
49 51
50/* 52/*
51 * These functions are in security/capability.c and are used 53 * These functions are in security/capability.c and are used
52 * as the default capabilities functions 54 * as the default capabilities functions
53 */ 55 */
54extern int cap_capable(struct task_struct *tsk, const struct cred *cred, 56extern int cap_capable(struct task_struct *tsk, const struct cred *cred,
55 int cap, int audit); 57 struct user_namespace *ns, int cap, int audit);
56extern int cap_settime(struct timespec *ts, struct timezone *tz); 58extern int cap_settime(const struct timespec *ts, const struct timezone *tz);
57extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode); 59extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode);
58extern int cap_ptrace_traceme(struct task_struct *parent); 60extern int cap_ptrace_traceme(struct task_struct *parent);
59extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); 61extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted);
@@ -267,6 +269,12 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
267 * @orig the original mount data copied from userspace. 269 * @orig the original mount data copied from userspace.
268 * @copy copied data which will be passed to the security module. 270 * @copy copied data which will be passed to the security module.
269 * Returns 0 if the copy was successful. 271 * Returns 0 if the copy was successful.
272 * @sb_remount:
273 * Extracts security system specifc mount options and verifys no changes
274 * are being made to those options.
275 * @sb superblock being remounted
276 * @data contains the filesystem-specific data.
277 * Return 0 if permission is granted.
270 * @sb_umount: 278 * @sb_umount:
271 * Check permission before the @mnt file system is unmounted. 279 * Check permission before the @mnt file system is unmounted.
272 * @mnt contains the mounted file system. 280 * @mnt contains the mounted file system.
@@ -315,6 +323,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
315 * then it should return -EOPNOTSUPP to skip this processing. 323 * then it should return -EOPNOTSUPP to skip this processing.
316 * @inode contains the inode structure of the newly created inode. 324 * @inode contains the inode structure of the newly created inode.
317 * @dir contains the inode structure of the parent directory. 325 * @dir contains the inode structure of the parent directory.
326 * @qstr contains the last path component of the new object
318 * @name will be set to the allocated name suffix (e.g. selinux). 327 * @name will be set to the allocated name suffix (e.g. selinux).
319 * @value will be set to the allocated attribute value. 328 * @value will be set to the allocated attribute value.
320 * @len will be set to the length of the value. 329 * @len will be set to the length of the value.
@@ -1254,15 +1263,10 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
1254 * credentials. 1263 * credentials.
1255 * @tsk contains the task_struct for the process. 1264 * @tsk contains the task_struct for the process.
1256 * @cred contains the credentials to use. 1265 * @cred contains the credentials to use.
1266 * @ns contains the user namespace we want the capability in
1257 * @cap contains the capability <include/linux/capability.h>. 1267 * @cap contains the capability <include/linux/capability.h>.
1258 * @audit: Whether to write an audit message or not 1268 * @audit: Whether to write an audit message or not
1259 * Return 0 if the capability is granted for @tsk. 1269 * Return 0 if the capability is granted for @tsk.
1260 * @sysctl:
1261 * Check permission before accessing the @table sysctl variable in the
1262 * manner specified by @op.
1263 * @table contains the ctl_table structure for the sysctl variable.
1264 * @op contains the operation (001 = search, 002 = write, 004 = read).
1265 * Return 0 if permission is granted.
1266 * @syslog: 1270 * @syslog:
1267 * Check permission before accessing the kernel message ring or changing 1271 * Check permission before accessing the kernel message ring or changing
1268 * logging to the console. 1272 * logging to the console.
@@ -1382,12 +1386,11 @@ struct security_operations {
1382 const kernel_cap_t *inheritable, 1386 const kernel_cap_t *inheritable,
1383 const kernel_cap_t *permitted); 1387 const kernel_cap_t *permitted);
1384 int (*capable) (struct task_struct *tsk, const struct cred *cred, 1388 int (*capable) (struct task_struct *tsk, const struct cred *cred,
1385 int cap, int audit); 1389 struct user_namespace *ns, int cap, int audit);
1386 int (*sysctl) (struct ctl_table *table, int op);
1387 int (*quotactl) (int cmds, int type, int id, struct super_block *sb); 1390 int (*quotactl) (int cmds, int type, int id, struct super_block *sb);
1388 int (*quota_on) (struct dentry *dentry); 1391 int (*quota_on) (struct dentry *dentry);
1389 int (*syslog) (int type); 1392 int (*syslog) (int type);
1390 int (*settime) (struct timespec *ts, struct timezone *tz); 1393 int (*settime) (const struct timespec *ts, const struct timezone *tz);
1391 int (*vm_enough_memory) (struct mm_struct *mm, long pages); 1394 int (*vm_enough_memory) (struct mm_struct *mm, long pages);
1392 1395
1393 int (*bprm_set_creds) (struct linux_binprm *bprm); 1396 int (*bprm_set_creds) (struct linux_binprm *bprm);
@@ -1399,6 +1402,7 @@ struct security_operations {
1399 int (*sb_alloc_security) (struct super_block *sb); 1402 int (*sb_alloc_security) (struct super_block *sb);
1400 void (*sb_free_security) (struct super_block *sb); 1403 void (*sb_free_security) (struct super_block *sb);
1401 int (*sb_copy_data) (char *orig, char *copy); 1404 int (*sb_copy_data) (char *orig, char *copy);
1405 int (*sb_remount) (struct super_block *sb, void *data);
1402 int (*sb_kern_mount) (struct super_block *sb, int flags, void *data); 1406 int (*sb_kern_mount) (struct super_block *sb, int flags, void *data);
1403 int (*sb_show_options) (struct seq_file *m, struct super_block *sb); 1407 int (*sb_show_options) (struct seq_file *m, struct super_block *sb);
1404 int (*sb_statfs) (struct dentry *dentry); 1408 int (*sb_statfs) (struct dentry *dentry);
@@ -1435,7 +1439,8 @@ struct security_operations {
1435 int (*inode_alloc_security) (struct inode *inode); 1439 int (*inode_alloc_security) (struct inode *inode);
1436 void (*inode_free_security) (struct inode *inode); 1440 void (*inode_free_security) (struct inode *inode);
1437 int (*inode_init_security) (struct inode *inode, struct inode *dir, 1441 int (*inode_init_security) (struct inode *inode, struct inode *dir,
1438 char **name, void **value, size_t *len); 1442 const struct qstr *qstr, char **name,
1443 void **value, size_t *len);
1439 int (*inode_create) (struct inode *dir, 1444 int (*inode_create) (struct inode *dir,
1440 struct dentry *dentry, int mode); 1445 struct dentry *dentry, int mode);
1441 int (*inode_link) (struct dentry *old_dentry, 1446 int (*inode_link) (struct dentry *old_dentry,
@@ -1623,7 +1628,7 @@ struct security_operations {
1623 int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); 1628 int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
1624 int (*xfrm_state_pol_flow_match) (struct xfrm_state *x, 1629 int (*xfrm_state_pol_flow_match) (struct xfrm_state *x,
1625 struct xfrm_policy *xp, 1630 struct xfrm_policy *xp,
1626 struct flowi *fl); 1631 const struct flowi *fl);
1627 int (*xfrm_decode_session) (struct sk_buff *skb, u32 *secid, int ckall); 1632 int (*xfrm_decode_session) (struct sk_buff *skb, u32 *secid, int ckall);
1628#endif /* CONFIG_SECURITY_NETWORK_XFRM */ 1633#endif /* CONFIG_SECURITY_NETWORK_XFRM */
1629 1634
@@ -1662,14 +1667,16 @@ int security_capset(struct cred *new, const struct cred *old,
1662 const kernel_cap_t *effective, 1667 const kernel_cap_t *effective,
1663 const kernel_cap_t *inheritable, 1668 const kernel_cap_t *inheritable,
1664 const kernel_cap_t *permitted); 1669 const kernel_cap_t *permitted);
1665int security_capable(int cap); 1670int security_capable(struct user_namespace *ns, const struct cred *cred,
1666int security_real_capable(struct task_struct *tsk, int cap); 1671 int cap);
1667int security_real_capable_noaudit(struct task_struct *tsk, int cap); 1672int security_real_capable(struct task_struct *tsk, struct user_namespace *ns,
1668int security_sysctl(struct ctl_table *table, int op); 1673 int cap);
1674int security_real_capable_noaudit(struct task_struct *tsk,
1675 struct user_namespace *ns, int cap);
1669int security_quotactl(int cmds, int type, int id, struct super_block *sb); 1676int security_quotactl(int cmds, int type, int id, struct super_block *sb);
1670int security_quota_on(struct dentry *dentry); 1677int security_quota_on(struct dentry *dentry);
1671int security_syslog(int type); 1678int security_syslog(int type);
1672int security_settime(struct timespec *ts, struct timezone *tz); 1679int security_settime(const struct timespec *ts, const struct timezone *tz);
1673int security_vm_enough_memory(long pages); 1680int security_vm_enough_memory(long pages);
1674int security_vm_enough_memory_mm(struct mm_struct *mm, long pages); 1681int security_vm_enough_memory_mm(struct mm_struct *mm, long pages);
1675int security_vm_enough_memory_kern(long pages); 1682int security_vm_enough_memory_kern(long pages);
@@ -1681,6 +1688,7 @@ int security_bprm_secureexec(struct linux_binprm *bprm);
1681int security_sb_alloc(struct super_block *sb); 1688int security_sb_alloc(struct super_block *sb);
1682void security_sb_free(struct super_block *sb); 1689void security_sb_free(struct super_block *sb);
1683int security_sb_copy_data(char *orig, char *copy); 1690int security_sb_copy_data(char *orig, char *copy);
1691int security_sb_remount(struct super_block *sb, void *data);
1684int security_sb_kern_mount(struct super_block *sb, int flags, void *data); 1692int security_sb_kern_mount(struct super_block *sb, int flags, void *data);
1685int security_sb_show_options(struct seq_file *m, struct super_block *sb); 1693int security_sb_show_options(struct seq_file *m, struct super_block *sb);
1686int security_sb_statfs(struct dentry *dentry); 1694int security_sb_statfs(struct dentry *dentry);
@@ -1696,7 +1704,8 @@ int security_sb_parse_opts_str(char *options, struct security_mnt_opts *opts);
1696int security_inode_alloc(struct inode *inode); 1704int security_inode_alloc(struct inode *inode);
1697void security_inode_free(struct inode *inode); 1705void security_inode_free(struct inode *inode);
1698int security_inode_init_security(struct inode *inode, struct inode *dir, 1706int security_inode_init_security(struct inode *inode, struct inode *dir,
1699 char **name, void **value, size_t *len); 1707 const struct qstr *qstr, char **name,
1708 void **value, size_t *len);
1700int security_inode_create(struct inode *dir, struct dentry *dentry, int mode); 1709int security_inode_create(struct inode *dir, struct dentry *dentry, int mode);
1701int security_inode_link(struct dentry *old_dentry, struct inode *dir, 1710int security_inode_link(struct dentry *old_dentry, struct inode *dir,
1702 struct dentry *new_dentry); 1711 struct dentry *new_dentry);
@@ -1856,38 +1865,34 @@ static inline int security_capset(struct cred *new,
1856 return cap_capset(new, old, effective, inheritable, permitted); 1865 return cap_capset(new, old, effective, inheritable, permitted);
1857} 1866}
1858 1867
1859static inline int security_capable(int cap) 1868static inline int security_capable(struct user_namespace *ns,
1869 const struct cred *cred, int cap)
1860{ 1870{
1861 return cap_capable(current, current_cred(), cap, SECURITY_CAP_AUDIT); 1871 return cap_capable(current, cred, ns, cap, SECURITY_CAP_AUDIT);
1862} 1872}
1863 1873
1864static inline int security_real_capable(struct task_struct *tsk, int cap) 1874static inline int security_real_capable(struct task_struct *tsk, struct user_namespace *ns, int cap)
1865{ 1875{
1866 int ret; 1876 int ret;
1867 1877
1868 rcu_read_lock(); 1878 rcu_read_lock();
1869 ret = cap_capable(tsk, __task_cred(tsk), cap, SECURITY_CAP_AUDIT); 1879 ret = cap_capable(tsk, __task_cred(tsk), ns, cap, SECURITY_CAP_AUDIT);
1870 rcu_read_unlock(); 1880 rcu_read_unlock();
1871 return ret; 1881 return ret;
1872} 1882}
1873 1883
1874static inline 1884static inline
1875int security_real_capable_noaudit(struct task_struct *tsk, int cap) 1885int security_real_capable_noaudit(struct task_struct *tsk, struct user_namespace *ns, int cap)
1876{ 1886{
1877 int ret; 1887 int ret;
1878 1888
1879 rcu_read_lock(); 1889 rcu_read_lock();
1880 ret = cap_capable(tsk, __task_cred(tsk), cap, 1890 ret = cap_capable(tsk, __task_cred(tsk), ns, cap,
1881 SECURITY_CAP_NOAUDIT); 1891 SECURITY_CAP_NOAUDIT);
1882 rcu_read_unlock(); 1892 rcu_read_unlock();
1883 return ret; 1893 return ret;
1884} 1894}
1885 1895
1886static inline int security_sysctl(struct ctl_table *table, int op)
1887{
1888 return 0;
1889}
1890
1891static inline int security_quotactl(int cmds, int type, int id, 1896static inline int security_quotactl(int cmds, int type, int id,
1892 struct super_block *sb) 1897 struct super_block *sb)
1893{ 1898{
@@ -1904,7 +1909,8 @@ static inline int security_syslog(int type)
1904 return 0; 1909 return 0;
1905} 1910}
1906 1911
1907static inline int security_settime(struct timespec *ts, struct timezone *tz) 1912static inline int security_settime(const struct timespec *ts,
1913 const struct timezone *tz)
1908{ 1914{
1909 return cap_settime(ts, tz); 1915 return cap_settime(ts, tz);
1910} 1916}
@@ -1964,6 +1970,11 @@ static inline int security_sb_copy_data(char *orig, char *copy)
1964 return 0; 1970 return 0;
1965} 1971}
1966 1972
1973static inline int security_sb_remount(struct super_block *sb, void *data)
1974{
1975 return 0;
1976}
1977
1967static inline int security_sb_kern_mount(struct super_block *sb, int flags, void *data) 1978static inline int security_sb_kern_mount(struct super_block *sb, int flags, void *data)
1968{ 1979{
1969 return 0; 1980 return 0;
@@ -2023,6 +2034,7 @@ static inline void security_inode_free(struct inode *inode)
2023 2034
2024static inline int security_inode_init_security(struct inode *inode, 2035static inline int security_inode_init_security(struct inode *inode,
2025 struct inode *dir, 2036 struct inode *dir,
2037 const struct qstr *qstr,
2026 char **name, 2038 char **name,
2027 void **value, 2039 void **value,
2028 size_t *len) 2040 size_t *len)
@@ -2761,7 +2773,8 @@ int security_xfrm_state_delete(struct xfrm_state *x);
2761void security_xfrm_state_free(struct xfrm_state *x); 2773void security_xfrm_state_free(struct xfrm_state *x);
2762int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); 2774int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
2763int security_xfrm_state_pol_flow_match(struct xfrm_state *x, 2775int security_xfrm_state_pol_flow_match(struct xfrm_state *x,
2764 struct xfrm_policy *xp, struct flowi *fl); 2776 struct xfrm_policy *xp,
2777 const struct flowi *fl);
2765int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid); 2778int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid);
2766void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl); 2779void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl);
2767 2780
@@ -2813,7 +2826,7 @@ static inline int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_s
2813} 2826}
2814 2827
2815static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, 2828static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x,
2816 struct xfrm_policy *xp, struct flowi *fl) 2829 struct xfrm_policy *xp, const struct flowi *fl)
2817{ 2830{
2818 return 1; 2831 return 1;
2819} 2832}