diff options
Diffstat (limited to 'security/selinux/include')
| -rw-r--r-- | security/selinux/include/avc.h | 22 | ||||
| -rw-r--r-- | security/selinux/include/classmap.h | 2 | ||||
| -rw-r--r-- | security/selinux/include/objsec.h | 9 | ||||
| -rw-r--r-- | security/selinux/include/security.h | 18 | ||||
| -rw-r--r-- | security/selinux/include/xfrm.h | 55 | 
5 files changed, 51 insertions, 55 deletions
diff --git a/security/selinux/include/avc.h b/security/selinux/include/avc.h index 92d0ab561db..ddf8eec03f2 100644 --- a/security/selinux/include/avc.h +++ b/security/selinux/include/avc.h @@ -102,7 +102,7 @@ static inline u32 avc_audit_required(u32 requested,  }  int slow_avc_audit(u32 ssid, u32 tsid, u16 tclass, -		   u32 requested, u32 audited, u32 denied, +		   u32 requested, u32 audited, u32 denied, int result,  		   struct common_audit_data *a,  		   unsigned flags); @@ -130,15 +130,15 @@ static inline int avc_audit(u32 ssid, u32 tsid,  			    u16 tclass, u32 requested,  			    struct av_decision *avd,  			    int result, -			    struct common_audit_data *a, unsigned flags) +			    struct common_audit_data *a)  {  	u32 audited, denied;  	audited = avc_audit_required(requested, avd, result, 0, &denied);  	if (likely(!audited))  		return 0;  	return slow_avc_audit(ssid, tsid, tclass, -			      requested, audited, denied, -			      a, flags); +			      requested, audited, denied, result, +			      a, 0);  }  #define AVC_STRICT 1 /* Ignore permissive mode. */ @@ -147,17 +147,9 @@ int avc_has_perm_noaudit(u32 ssid, u32 tsid,  			 unsigned flags,  			 struct av_decision *avd); -int avc_has_perm_flags(u32 ssid, u32 tsid, -		       u16 tclass, u32 requested, -		       struct common_audit_data *auditdata, -		       unsigned); - -static inline int avc_has_perm(u32 ssid, u32 tsid, -			       u16 tclass, u32 requested, -			       struct common_audit_data *auditdata) -{ -	return avc_has_perm_flags(ssid, tsid, tclass, requested, auditdata, 0); -} +int avc_has_perm(u32 ssid, u32 tsid, +		 u16 tclass, u32 requested, +		 struct common_audit_data *auditdata);  u32 avc_policy_seqno(void); diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h index 14d04e63b1f..be491a74c1e 100644 --- a/security/selinux/include/classmap.h +++ b/security/selinux/include/classmap.h @@ -147,7 +147,7 @@ struct security_class_mapping secclass_map[] = {  	{ "peer", { "recv", NULL } },  	{ "capability2",  	  { "mac_override", "mac_admin", "syslog", "wake_alarm", "block_suspend", -	    NULL } }, +	    "audit_read", NULL } },  	{ "kernel_service", { "use_as_override", "create_files_as", NULL } },  	{ "tun_socket",  	  { COMMON_SOCK_PERMS, "attach_queue", NULL } }, diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h index aa47bcabb5f..078e553f52f 100644 --- a/security/selinux/include/objsec.h +++ b/security/selinux/include/objsec.h @@ -38,7 +38,10 @@ struct task_security_struct {  struct inode_security_struct {  	struct inode *inode;	/* back pointer to inode object */ -	struct list_head list;	/* list of inode_security_struct */ +	union { +		struct list_head list;	/* list of inode_security_struct */ +		struct rcu_head rcu;	/* for freeing the inode_security_struct */ +	};  	u32 task_sid;		/* SID of creating task */  	u32 sid;		/* SID of this object */  	u16 sclass;		/* security class of this object */ @@ -58,8 +61,8 @@ struct superblock_security_struct {  	u32 sid;			/* SID of file system superblock */  	u32 def_sid;			/* default SID for labeling */  	u32 mntpoint_sid;		/* SECURITY_FS_USE_MNTPOINT context for files */ -	unsigned int behavior;		/* labeling behavior */ -	unsigned char flags;		/* which mount options were specified */ +	unsigned short behavior;	/* labeling behavior */ +	unsigned short flags;		/* which mount options were specified */  	struct mutex lock;  	struct list_head isec_head;  	spinlock_t isec_lock; diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h index 8fd8e18ea34..ce7852cf526 100644 --- a/security/selinux/include/security.h +++ b/security/selinux/include/security.h @@ -33,26 +33,28 @@  #define POLICYDB_VERSION_ROLETRANS	26  #define POLICYDB_VERSION_NEW_OBJECT_DEFAULTS	27  #define POLICYDB_VERSION_DEFAULT_TYPE	28 +#define POLICYDB_VERSION_CONSTRAINT_NAMES	29  /* Range of policy versions we understand*/  #define POLICYDB_VERSION_MIN   POLICYDB_VERSION_BASE  #ifdef CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX  #define POLICYDB_VERSION_MAX	CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE  #else -#define POLICYDB_VERSION_MAX	POLICYDB_VERSION_DEFAULT_TYPE +#define POLICYDB_VERSION_MAX	POLICYDB_VERSION_CONSTRAINT_NAMES  #endif  /* Mask for just the mount related flags */  #define SE_MNTMASK	0x0f  /* Super block security struct flags for mount options */ +/* BE CAREFUL, these need to be the low order bits for selinux_get_mnt_opts */  #define CONTEXT_MNT	0x01  #define FSCONTEXT_MNT	0x02  #define ROOTCONTEXT_MNT	0x04  #define DEFCONTEXT_MNT	0x08 +#define SBLABEL_MNT	0x10  /* Non-mount related flags */ -#define SE_SBINITIALIZED	0x10 -#define SE_SBPROC		0x20 -#define SE_SBLABELSUPP	0x40 +#define SE_SBINITIALIZED	0x0100 +#define SE_SBPROC		0x0200  #define CONTEXT_STR	"context="  #define FSCONTEXT_STR	"fscontext=" @@ -68,12 +70,15 @@ extern int selinux_enabled;  enum {  	POLICYDB_CAPABILITY_NETPEER,  	POLICYDB_CAPABILITY_OPENPERM, +	POLICYDB_CAPABILITY_REDHAT1, +	POLICYDB_CAPABILITY_ALWAYSNETWORK,  	__POLICYDB_CAPABILITY_MAX  };  #define POLICYDB_CAPABILITY_MAX (__POLICYDB_CAPABILITY_MAX - 1)  extern int selinux_policycap_netpeer;  extern int selinux_policycap_openperm; +extern int selinux_policycap_alwaysnetwork;  /*   * type_datum properties @@ -129,7 +134,7 @@ int security_sid_to_context(u32 sid, char **scontext,  int security_sid_to_context_force(u32 sid, char **scontext, u32 *scontext_len);  int security_context_to_sid(const char *scontext, u32 scontext_len, -	u32 *out_sid); +			    u32 *out_sid, gfp_t gfp);  int security_context_to_sid_default(const char *scontext, u32 scontext_len,  				    u32 *out_sid, u32 def_sid, gfp_t gfp_flags); @@ -172,8 +177,7 @@ int security_get_allow_unknown(void);  #define SECURITY_FS_USE_NATIVE		7 /* use native label support */  #define SECURITY_FS_USE_MAX		7 /* Highest SECURITY_FS_USE_XXX */ -int security_fs_use(const char *fstype, unsigned int *behavior, -	u32 *sid); +int security_fs_use(struct super_block *sb);  int security_genfs_sid(const char *fstype, char *name, u16 sclass,  	u32 *sid); diff --git a/security/selinux/include/xfrm.h b/security/selinux/include/xfrm.h index 6713f04e30b..1450f85b946 100644 --- a/security/selinux/include/xfrm.h +++ b/security/selinux/include/xfrm.h @@ -10,29 +10,22 @@  #include <net/flow.h>  int selinux_xfrm_policy_alloc(struct xfrm_sec_ctx **ctxp, -			      struct xfrm_user_sec_ctx *sec_ctx); +			      struct xfrm_user_sec_ctx *uctx, +			      gfp_t gfp);  int selinux_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx,  			      struct xfrm_sec_ctx **new_ctxp);  void selinux_xfrm_policy_free(struct xfrm_sec_ctx *ctx);  int selinux_xfrm_policy_delete(struct xfrm_sec_ctx *ctx);  int selinux_xfrm_state_alloc(struct xfrm_state *x, -	struct xfrm_user_sec_ctx *sec_ctx, u32 secid); +			     struct xfrm_user_sec_ctx *uctx); +int selinux_xfrm_state_alloc_acquire(struct xfrm_state *x, +				     struct xfrm_sec_ctx *polsec, u32 secid);  void selinux_xfrm_state_free(struct xfrm_state *x);  int selinux_xfrm_state_delete(struct xfrm_state *x);  int selinux_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);  int selinux_xfrm_state_pol_flow_match(struct xfrm_state *x, -			struct xfrm_policy *xp, const struct flowi *fl); - -/* - * Extract the security blob from the sock (it's actually on the socket) - */ -static inline struct inode_security_struct *get_sock_isec(struct sock *sk) -{ -	if (!sk->sk_socket) -		return NULL; - -	return SOCK_INODE(sk->sk_socket)->i_security; -} +				      struct xfrm_policy *xp, +				      const struct flowi *fl);  #ifdef CONFIG_SECURITY_NETWORK_XFRM  extern atomic_t selinux_xfrm_refcount; @@ -42,20 +35,22 @@ static inline int selinux_xfrm_enabled(void)  	return (atomic_read(&selinux_xfrm_refcount) > 0);  } -int selinux_xfrm_sock_rcv_skb(u32 sid, struct sk_buff *skb, -			struct common_audit_data *ad); -int selinux_xfrm_postroute_last(u32 isec_sid, struct sk_buff *skb, -			struct common_audit_data *ad, u8 proto); +int selinux_xfrm_sock_rcv_skb(u32 sk_sid, struct sk_buff *skb, +			      struct common_audit_data *ad); +int selinux_xfrm_postroute_last(u32 sk_sid, struct sk_buff *skb, +				struct common_audit_data *ad, u8 proto);  int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid, int ckall); +int selinux_xfrm_skb_sid(struct sk_buff *skb, u32 *sid);  static inline void selinux_xfrm_notify_policyload(void)  {  	struct net *net; -	atomic_inc(&flow_cache_genid);  	rtnl_lock(); -	for_each_net(net) +	for_each_net(net) { +		atomic_inc(&net->xfrm.flow_cache_genid);  		rt_genid_bump_all(net); +	}  	rtnl_unlock();  }  #else @@ -64,19 +59,21 @@ static inline int selinux_xfrm_enabled(void)  	return 0;  } -static inline int selinux_xfrm_sock_rcv_skb(u32 isec_sid, struct sk_buff *skb, -			struct common_audit_data *ad) +static inline int selinux_xfrm_sock_rcv_skb(u32 sk_sid, struct sk_buff *skb, +					    struct common_audit_data *ad)  {  	return 0;  } -static inline int selinux_xfrm_postroute_last(u32 isec_sid, struct sk_buff *skb, -			struct common_audit_data *ad, u8 proto) +static inline int selinux_xfrm_postroute_last(u32 sk_sid, struct sk_buff *skb, +					      struct common_audit_data *ad, +					      u8 proto)  {  	return 0;  } -static inline int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid, int ckall) +static inline int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid, +					      int ckall)  {  	*sid = SECSID_NULL;  	return 0; @@ -85,12 +82,12 @@ static inline int selinux_xfrm_decode_session(struct sk_buff *skb, u32 *sid, int  static inline void selinux_xfrm_notify_policyload(void)  {  } -#endif -static inline void selinux_skb_xfrm_sid(struct sk_buff *skb, u32 *sid) +static inline int selinux_xfrm_skb_sid(struct sk_buff *skb, u32 *sid)  { -	int err = selinux_xfrm_decode_session(skb, sid, 0); -	BUG_ON(err); +	*sid = SECSID_NULL; +	return 0;  } +#endif  #endif /* _SELINUX_XFRM_H_ */  | 
