Merge branch 'master' into next
Conflicts: security/smack/smack_lsm.c Verified and added fix by Stephen Rothwell <sfr@canb.auug.org.au> Ok'd by Casey Schaufler <casey@schaufler-ca.com> Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
@@ -3921,18 +3921,18 @@ static int selinux_socket_shutdown(struct socket *sock, int how)
|
||||
return sock_has_perm(current, sock->sk, SOCKET__SHUTDOWN);
|
||||
}
|
||||
|
||||
static int selinux_socket_unix_stream_connect(struct socket *sock,
|
||||
struct socket *other,
|
||||
static int selinux_socket_unix_stream_connect(struct sock *sock,
|
||||
struct sock *other,
|
||||
struct sock *newsk)
|
||||
{
|
||||
struct sk_security_struct *sksec_sock = sock->sk->sk_security;
|
||||
struct sk_security_struct *sksec_other = other->sk->sk_security;
|
||||
struct sk_security_struct *sksec_sock = sock->sk_security;
|
||||
struct sk_security_struct *sksec_other = other->sk_security;
|
||||
struct sk_security_struct *sksec_new = newsk->sk_security;
|
||||
struct common_audit_data ad;
|
||||
int err;
|
||||
|
||||
COMMON_AUDIT_DATA_INIT(&ad, NET);
|
||||
ad.u.net.sk = other->sk;
|
||||
ad.u.net.sk = other;
|
||||
|
||||
err = avc_has_perm(sksec_sock->sid, sksec_other->sid,
|
||||
sksec_other->sclass,
|
||||
@@ -4520,11 +4520,11 @@ static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,
|
||||
if (selinux_secmark_enabled())
|
||||
if (avc_has_perm(sksec->sid, skb->secmark,
|
||||
SECCLASS_PACKET, PACKET__SEND, &ad))
|
||||
return NF_DROP;
|
||||
return NF_DROP_ERR(-ECONNREFUSED);
|
||||
|
||||
if (selinux_policycap_netpeer)
|
||||
if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto))
|
||||
return NF_DROP;
|
||||
return NF_DROP_ERR(-ECONNREFUSED);
|
||||
|
||||
return NF_ACCEPT;
|
||||
}
|
||||
@@ -4581,7 +4581,7 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex,
|
||||
secmark_perm = PACKET__SEND;
|
||||
break;
|
||||
default:
|
||||
return NF_DROP;
|
||||
return NF_DROP_ERR(-ECONNREFUSED);
|
||||
}
|
||||
if (secmark_perm == PACKET__FORWARD_OUT) {
|
||||
if (selinux_skb_peerlbl_sid(skb, family, &peer_sid))
|
||||
@@ -4603,7 +4603,7 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex,
|
||||
if (secmark_active)
|
||||
if (avc_has_perm(peer_sid, skb->secmark,
|
||||
SECCLASS_PACKET, secmark_perm, &ad))
|
||||
return NF_DROP;
|
||||
return NF_DROP_ERR(-ECONNREFUSED);
|
||||
|
||||
if (peerlbl_active) {
|
||||
u32 if_sid;
|
||||
@@ -4613,13 +4613,13 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex,
|
||||
return NF_DROP;
|
||||
if (avc_has_perm(peer_sid, if_sid,
|
||||
SECCLASS_NETIF, NETIF__EGRESS, &ad))
|
||||
return NF_DROP;
|
||||
return NF_DROP_ERR(-ECONNREFUSED);
|
||||
|
||||
if (sel_netnode_sid(addrp, family, &node_sid))
|
||||
return NF_DROP;
|
||||
if (avc_has_perm(peer_sid, node_sid,
|
||||
SECCLASS_NODE, NODE__SENDTO, &ad))
|
||||
return NF_DROP;
|
||||
return NF_DROP_ERR(-ECONNREFUSED);
|
||||
}
|
||||
|
||||
return NF_ACCEPT;
|
||||
|
@@ -1145,24 +1145,28 @@ static void sel_remove_entries(struct dentry *de)
|
||||
{
|
||||
struct list_head *node;
|
||||
|
||||
spin_lock(&dcache_lock);
|
||||
spin_lock(&de->d_lock);
|
||||
node = de->d_subdirs.next;
|
||||
while (node != &de->d_subdirs) {
|
||||
struct dentry *d = list_entry(node, struct dentry, d_u.d_child);
|
||||
|
||||
spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
|
||||
list_del_init(node);
|
||||
|
||||
if (d->d_inode) {
|
||||
d = dget_locked(d);
|
||||
spin_unlock(&dcache_lock);
|
||||
dget_dlock(d);
|
||||
spin_unlock(&de->d_lock);
|
||||
spin_unlock(&d->d_lock);
|
||||
d_delete(d);
|
||||
simple_unlink(de->d_inode, d);
|
||||
dput(d);
|
||||
spin_lock(&dcache_lock);
|
||||
}
|
||||
spin_lock(&de->d_lock);
|
||||
} else
|
||||
spin_unlock(&d->d_lock);
|
||||
node = de->d_subdirs.next;
|
||||
}
|
||||
|
||||
spin_unlock(&dcache_lock);
|
||||
spin_unlock(&de->d_lock);
|
||||
}
|
||||
|
||||
#define BOOL_DIR_NAME "booleans"
|
||||
|
Reference in New Issue
Block a user