diff options
Diffstat (limited to 'include/linux/security.h')
| -rw-r--r-- | include/linux/security.h | 51 | 
1 files changed, 29 insertions, 22 deletions
diff --git a/include/linux/security.h b/include/linux/security.h index b2b7f9749f5e..56cac520d014 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -25,6 +25,7 @@  #include <linux/fs.h>  #include <linux/fsnotify.h>  #include <linux/binfmts.h> +#include <linux/dcache.h>  #include <linux/signal.h>  #include <linux/resource.h>  #include <linux/sem.h> @@ -53,7 +54,7 @@ struct audit_krule;   */  extern int cap_capable(struct task_struct *tsk, const struct cred *cred,  		       int cap, int audit); -extern int cap_settime(struct timespec *ts, struct timezone *tz); +extern int cap_settime(const struct timespec *ts, const struct timezone *tz);  extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode);  extern int cap_ptrace_traceme(struct task_struct *parent);  extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); @@ -267,6 +268,12 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)   *	@orig the original mount data copied from userspace.   *	@copy copied data which will be passed to the security module.   *	Returns 0 if the copy was successful. + * @sb_remount: + *	Extracts security system specifc mount options and verifys no changes + *	are being made to those options. + *	@sb superblock being remounted + *	@data contains the filesystem-specific data. + *	Return 0 if permission is granted.   * @sb_umount:   *	Check permission before the @mnt file system is unmounted.   *	@mnt contains the mounted file system. @@ -315,6 +322,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)   *	then it should return -EOPNOTSUPP to skip this processing.   *	@inode contains the inode structure of the newly created inode.   *	@dir contains the inode structure of the parent directory. + *	@qstr contains the last path component of the new object   *	@name will be set to the allocated name suffix (e.g. selinux).   *	@value will be set to the allocated attribute value.   *	@len will be set to the length of the value. @@ -1257,12 +1265,6 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)   *	@cap contains the capability <include/linux/capability.h>.   *	@audit: Whether to write an audit message or not   *	Return 0 if the capability is granted for @tsk. - * @sysctl: - *	Check permission before accessing the @table sysctl variable in the - *	manner specified by @op. - *	@table contains the ctl_table structure for the sysctl variable. - *	@op contains the operation (001 = search, 002 = write, 004 = read). - *	Return 0 if permission is granted.   * @syslog:   *	Check permission before accessing the kernel message ring or changing   *	logging to the console. @@ -1383,11 +1385,10 @@ struct security_operations {  		       const kernel_cap_t *permitted);  	int (*capable) (struct task_struct *tsk, const struct cred *cred,  			int cap, int audit); -	int (*sysctl) (struct ctl_table *table, int op);  	int (*quotactl) (int cmds, int type, int id, struct super_block *sb);  	int (*quota_on) (struct dentry *dentry);  	int (*syslog) (int type); -	int (*settime) (struct timespec *ts, struct timezone *tz); +	int (*settime) (const struct timespec *ts, const struct timezone *tz);  	int (*vm_enough_memory) (struct mm_struct *mm, long pages);  	int (*bprm_set_creds) (struct linux_binprm *bprm); @@ -1399,6 +1400,7 @@ struct security_operations {  	int (*sb_alloc_security) (struct super_block *sb);  	void (*sb_free_security) (struct super_block *sb);  	int (*sb_copy_data) (char *orig, char *copy); +	int (*sb_remount) (struct super_block *sb, void *data);  	int (*sb_kern_mount) (struct super_block *sb, int flags, void *data);  	int (*sb_show_options) (struct seq_file *m, struct super_block *sb);  	int (*sb_statfs) (struct dentry *dentry); @@ -1435,7 +1437,8 @@ struct security_operations {  	int (*inode_alloc_security) (struct inode *inode);  	void (*inode_free_security) (struct inode *inode);  	int (*inode_init_security) (struct inode *inode, struct inode *dir, -				    char **name, void **value, size_t *len); +				    const struct qstr *qstr, char **name, +				    void **value, size_t *len);  	int (*inode_create) (struct inode *dir,  			     struct dentry *dentry, int mode);  	int (*inode_link) (struct dentry *old_dentry, @@ -1623,7 +1626,7 @@ struct security_operations {  	int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);  	int (*xfrm_state_pol_flow_match) (struct xfrm_state *x,  					  struct xfrm_policy *xp, -					  struct flowi *fl); +					  const struct flowi *fl);  	int (*xfrm_decode_session) (struct sk_buff *skb, u32 *secid, int ckall);  #endif	/* CONFIG_SECURITY_NETWORK_XFRM */ @@ -1665,11 +1668,10 @@ int security_capset(struct cred *new, const struct cred *old,  int security_capable(const struct cred *cred, int cap);  int security_real_capable(struct task_struct *tsk, int cap);  int security_real_capable_noaudit(struct task_struct *tsk, int cap); -int security_sysctl(struct ctl_table *table, int op);  int security_quotactl(int cmds, int type, int id, struct super_block *sb);  int security_quota_on(struct dentry *dentry);  int security_syslog(int type); -int security_settime(struct timespec *ts, struct timezone *tz); +int security_settime(const struct timespec *ts, const struct timezone *tz);  int security_vm_enough_memory(long pages);  int security_vm_enough_memory_mm(struct mm_struct *mm, long pages);  int security_vm_enough_memory_kern(long pages); @@ -1681,6 +1683,7 @@ int security_bprm_secureexec(struct linux_binprm *bprm);  int security_sb_alloc(struct super_block *sb);  void security_sb_free(struct super_block *sb);  int security_sb_copy_data(char *orig, char *copy); +int security_sb_remount(struct super_block *sb, void *data);  int security_sb_kern_mount(struct super_block *sb, int flags, void *data);  int security_sb_show_options(struct seq_file *m, struct super_block *sb);  int security_sb_statfs(struct dentry *dentry); @@ -1696,7 +1699,8 @@ int security_sb_parse_opts_str(char *options, struct security_mnt_opts *opts);  int security_inode_alloc(struct inode *inode);  void security_inode_free(struct inode *inode);  int security_inode_init_security(struct inode *inode, struct inode *dir, -				  char **name, void **value, size_t *len); +				 const struct qstr *qstr, char **name, +				 void **value, size_t *len);  int security_inode_create(struct inode *dir, struct dentry *dentry, int mode);  int security_inode_link(struct dentry *old_dentry, struct inode *dir,  			 struct dentry *new_dentry); @@ -1883,11 +1887,6 @@ int security_real_capable_noaudit(struct task_struct *tsk, int cap)  	return ret;  } -static inline int security_sysctl(struct ctl_table *table, int op) -{ -	return 0; -} -  static inline int security_quotactl(int cmds, int type, int id,  				     struct super_block *sb)  { @@ -1904,7 +1903,8 @@ static inline int security_syslog(int type)  	return 0;  } -static inline int security_settime(struct timespec *ts, struct timezone *tz) +static inline int security_settime(const struct timespec *ts, +				   const struct timezone *tz)  {  	return cap_settime(ts, tz);  } @@ -1964,6 +1964,11 @@ static inline int security_sb_copy_data(char *orig, char *copy)  	return 0;  } +static inline int security_sb_remount(struct super_block *sb, void *data) +{ +	return 0; +} +  static inline int security_sb_kern_mount(struct super_block *sb, int flags, void *data)  {  	return 0; @@ -2023,6 +2028,7 @@ static inline void security_inode_free(struct inode *inode)  static inline int security_inode_init_security(struct inode *inode,  						struct inode *dir, +						const struct qstr *qstr,  						char **name,  						void **value,  						size_t *len) @@ -2761,7 +2767,8 @@ int security_xfrm_state_delete(struct xfrm_state *x);  void security_xfrm_state_free(struct xfrm_state *x);  int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);  int security_xfrm_state_pol_flow_match(struct xfrm_state *x, -				       struct xfrm_policy *xp, struct flowi *fl); +				       struct xfrm_policy *xp, +				       const struct flowi *fl);  int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid);  void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl); @@ -2813,7 +2820,7 @@ static inline int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_s  }  static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, -			struct xfrm_policy *xp, struct flowi *fl) +			struct xfrm_policy *xp, const struct flowi *fl)  {  	return 1;  }  | 
