diff options
Diffstat (limited to 'include/linux/security.h')
| -rw-r--r-- | include/linux/security.h | 81 |
1 files changed, 47 insertions, 34 deletions
diff --git a/include/linux/security.h b/include/linux/security.h index b2b7f9749f5e..8ce59ef3e5af 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 | ||
| 47 | struct ctl_table; | 48 | struct ctl_table; |
| 48 | struct audit_krule; | 49 | struct audit_krule; |
| 50 | struct 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 | */ |
| 54 | extern int cap_capable(struct task_struct *tsk, const struct cred *cred, | 56 | extern 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); |
| 56 | extern int cap_settime(struct timespec *ts, struct timezone *tz); | 58 | extern int cap_settime(const struct timespec *ts, const struct timezone *tz); |
| 57 | extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode); | 59 | extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode); |
| 58 | extern int cap_ptrace_traceme(struct task_struct *parent); | 60 | extern int cap_ptrace_traceme(struct task_struct *parent); |
| 59 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 61 | extern 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, |
| @@ -1451,7 +1456,7 @@ struct security_operations { | |||
| 1451 | struct inode *new_dir, struct dentry *new_dentry); | 1456 | struct inode *new_dir, struct dentry *new_dentry); |
| 1452 | int (*inode_readlink) (struct dentry *dentry); | 1457 | int (*inode_readlink) (struct dentry *dentry); |
| 1453 | int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd); | 1458 | int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd); |
| 1454 | int (*inode_permission) (struct inode *inode, int mask); | 1459 | int (*inode_permission) (struct inode *inode, int mask, unsigned flags); |
| 1455 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); | 1460 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); |
| 1456 | int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); | 1461 | int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); |
| 1457 | int (*inode_setxattr) (struct dentry *dentry, const char *name, | 1462 | int (*inode_setxattr) (struct dentry *dentry, const char *name, |
| @@ -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); |
| 1665 | int security_capable(const struct cred *cred, int cap); | 1670 | int security_capable(struct user_namespace *ns, const struct cred *cred, |
| 1666 | int security_real_capable(struct task_struct *tsk, int cap); | 1671 | int cap); |
| 1667 | int security_real_capable_noaudit(struct task_struct *tsk, int cap); | 1672 | int security_real_capable(struct task_struct *tsk, struct user_namespace *ns, |
| 1668 | int security_sysctl(struct ctl_table *table, int op); | 1673 | int cap); |
| 1674 | int security_real_capable_noaudit(struct task_struct *tsk, | ||
| 1675 | struct user_namespace *ns, int cap); | ||
| 1669 | int security_quotactl(int cmds, int type, int id, struct super_block *sb); | 1676 | int security_quotactl(int cmds, int type, int id, struct super_block *sb); |
| 1670 | int security_quota_on(struct dentry *dentry); | 1677 | int security_quota_on(struct dentry *dentry); |
| 1671 | int security_syslog(int type); | 1678 | int security_syslog(int type); |
| 1672 | int security_settime(struct timespec *ts, struct timezone *tz); | 1679 | int security_settime(const struct timespec *ts, const struct timezone *tz); |
| 1673 | int security_vm_enough_memory(long pages); | 1680 | int security_vm_enough_memory(long pages); |
| 1674 | int security_vm_enough_memory_mm(struct mm_struct *mm, long pages); | 1681 | int security_vm_enough_memory_mm(struct mm_struct *mm, long pages); |
| 1675 | int security_vm_enough_memory_kern(long pages); | 1682 | int security_vm_enough_memory_kern(long pages); |
| @@ -1681,6 +1688,7 @@ int security_bprm_secureexec(struct linux_binprm *bprm); | |||
| 1681 | int security_sb_alloc(struct super_block *sb); | 1688 | int security_sb_alloc(struct super_block *sb); |
| 1682 | void security_sb_free(struct super_block *sb); | 1689 | void security_sb_free(struct super_block *sb); |
| 1683 | int security_sb_copy_data(char *orig, char *copy); | 1690 | int security_sb_copy_data(char *orig, char *copy); |
| 1691 | int security_sb_remount(struct super_block *sb, void *data); | ||
| 1684 | int security_sb_kern_mount(struct super_block *sb, int flags, void *data); | 1692 | int security_sb_kern_mount(struct super_block *sb, int flags, void *data); |
| 1685 | int security_sb_show_options(struct seq_file *m, struct super_block *sb); | 1693 | int security_sb_show_options(struct seq_file *m, struct super_block *sb); |
| 1686 | int security_sb_statfs(struct dentry *dentry); | 1694 | int security_sb_statfs(struct dentry *dentry); |
| @@ -1696,7 +1704,8 @@ int security_sb_parse_opts_str(char *options, struct security_mnt_opts *opts); | |||
| 1696 | int security_inode_alloc(struct inode *inode); | 1704 | int security_inode_alloc(struct inode *inode); |
| 1697 | void security_inode_free(struct inode *inode); | 1705 | void security_inode_free(struct inode *inode); |
| 1698 | int security_inode_init_security(struct inode *inode, struct inode *dir, | 1706 | int 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); | ||
| 1700 | int security_inode_create(struct inode *dir, struct dentry *dentry, int mode); | 1709 | int security_inode_create(struct inode *dir, struct dentry *dentry, int mode); |
| 1701 | int security_inode_link(struct dentry *old_dentry, struct inode *dir, | 1710 | int 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 | ||
| 1859 | static inline int security_capable(const struct cred *cred, int cap) | 1868 | static inline int security_capable(struct user_namespace *ns, |
| 1869 | const struct cred *cred, int cap) | ||
| 1860 | { | 1870 | { |
| 1861 | return cap_capable(current, cred, cap, SECURITY_CAP_AUDIT); | 1871 | return cap_capable(current, cred, ns, cap, SECURITY_CAP_AUDIT); |
| 1862 | } | 1872 | } |
| 1863 | 1873 | ||
| 1864 | static inline int security_real_capable(struct task_struct *tsk, int cap) | 1874 | static 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 | ||
| 1874 | static inline | 1884 | static inline |
| 1875 | int security_real_capable_noaudit(struct task_struct *tsk, int cap) | 1885 | int 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 | ||
| 1886 | static inline int security_sysctl(struct ctl_table *table, int op) | ||
| 1887 | { | ||
| 1888 | return 0; | ||
| 1889 | } | ||
| 1890 | |||
| 1891 | static inline int security_quotactl(int cmds, int type, int id, | 1896 | static 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 | ||
| 1907 | static inline int security_settime(struct timespec *ts, struct timezone *tz) | 1912 | static 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 | ||
| 1973 | static inline int security_sb_remount(struct super_block *sb, void *data) | ||
| 1974 | { | ||
| 1975 | return 0; | ||
| 1976 | } | ||
| 1977 | |||
| 1967 | static inline int security_sb_kern_mount(struct super_block *sb, int flags, void *data) | 1978 | static 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 | ||
| 2024 | static inline int security_inode_init_security(struct inode *inode, | 2035 | static 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); | |||
| 2761 | void security_xfrm_state_free(struct xfrm_state *x); | 2773 | void security_xfrm_state_free(struct xfrm_state *x); |
| 2762 | int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); | 2774 | int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); |
| 2763 | int security_xfrm_state_pol_flow_match(struct xfrm_state *x, | 2775 | int 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); | ||
| 2765 | int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid); | 2778 | int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid); |
| 2766 | void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl); | 2779 | void 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 | ||
| 2815 | static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, | 2828 | static 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 | } |
