aboutsummaryrefslogtreecommitdiffstats
path: root/security/selinux/hooks.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/selinux/hooks.c')
-rw-r--r--security/selinux/hooks.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 28832e68980..b6c378dd4f1 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -3641,32 +3641,32 @@ static unsigned int selinux_ipv6_postroute_last(unsigned int hooknum,
3641 3641
3642static int selinux_netlink_send(struct sock *sk, struct sk_buff *skb) 3642static int selinux_netlink_send(struct sock *sk, struct sk_buff *skb)
3643{ 3643{
3644 struct task_security_struct *tsec;
3645 struct av_decision avd;
3646 int err; 3644 int err;
3647 3645
3648 err = secondary_ops->netlink_send(sk, skb); 3646 err = secondary_ops->netlink_send(sk, skb);
3649 if (err) 3647 if (err)
3650 return err; 3648 return err;
3651 3649
3652 tsec = current->security;
3653
3654 avd.allowed = 0;
3655 avc_has_perm_noaudit(tsec->sid, tsec->sid,
3656 SECCLASS_CAPABILITY, ~0, &avd);
3657 cap_mask(NETLINK_CB(skb).eff_cap, avd.allowed);
3658
3659 if (policydb_loaded_version >= POLICYDB_VERSION_NLCLASS) 3650 if (policydb_loaded_version >= POLICYDB_VERSION_NLCLASS)
3660 err = selinux_nlmsg_perm(sk, skb); 3651 err = selinux_nlmsg_perm(sk, skb);
3661 3652
3662 return err; 3653 return err;
3663} 3654}
3664 3655
3665static int selinux_netlink_recv(struct sk_buff *skb) 3656static int selinux_netlink_recv(struct sk_buff *skb, int capability)
3666{ 3657{
3667 if (!cap_raised(NETLINK_CB(skb).eff_cap, CAP_NET_ADMIN)) 3658 int err;
3668 return -EPERM; 3659 struct avc_audit_data ad;
3669 return 0; 3660
3661 err = secondary_ops->netlink_recv(skb, capability);
3662 if (err)
3663 return err;
3664
3665 AVC_AUDIT_DATA_INIT(&ad, CAP);
3666 ad.u.cap = capability;
3667
3668 return avc_has_perm(NETLINK_CB(skb).sid, NETLINK_CB(skb).sid,
3669 SECCLASS_CAPABILITY, CAP_TO_MASK(capability), &ad);
3670} 3670}
3671 3671
3672static int ipc_alloc_security(struct task_struct *task, 3672static int ipc_alloc_security(struct task_struct *task,