diff options
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 28 | 
1 files changed, 26 insertions, 2 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 4796ddd4e721..d9154cf90ae1 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -3354,11 +3354,11 @@ static int selinux_task_setrlimit(struct task_struct *p, unsigned int resource,  	return 0;  } -static int selinux_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp) +static int selinux_task_setscheduler(struct task_struct *p)  {  	int rc; -	rc = cap_task_setscheduler(p, policy, lp); +	rc = cap_task_setscheduler(p);  	if (rc)  		return rc; @@ -4279,6 +4279,27 @@ static void selinux_inet_conn_established(struct sock *sk, struct sk_buff *skb)  	selinux_skb_peerlbl_sid(skb, family, &sksec->peer_sid);  } +static int selinux_secmark_relabel_packet(u32 sid) +{ +	const struct task_security_struct *__tsec; +	u32 tsid; + +	__tsec = current_security(); +	tsid = __tsec->sid; + +	return avc_has_perm(tsid, sid, SECCLASS_PACKET, PACKET__RELABELTO, NULL); +} + +static void selinux_secmark_refcount_inc(void) +{ +	atomic_inc(&selinux_secmark_refcount); +} + +static void selinux_secmark_refcount_dec(void) +{ +	atomic_dec(&selinux_secmark_refcount); +} +  static void selinux_req_classify_flow(const struct request_sock *req,  				      struct flowi *fl)  { @@ -5533,6 +5554,9 @@ static struct security_operations selinux_ops = {  	.inet_conn_request =		selinux_inet_conn_request,  	.inet_csk_clone =		selinux_inet_csk_clone,  	.inet_conn_established =	selinux_inet_conn_established, +	.secmark_relabel_packet =	selinux_secmark_relabel_packet, +	.secmark_refcount_inc =		selinux_secmark_refcount_inc, +	.secmark_refcount_dec =		selinux_secmark_refcount_dec,  	.req_classify_flow =		selinux_req_classify_flow,  	.tun_dev_create =		selinux_tun_dev_create,  	.tun_dev_post_create = 		selinux_tun_dev_post_create,  | 
