aboutsummaryrefslogtreecommitdiffstats
path: root/security
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-06 15:30:19 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-06 15:30:19 -0500
commitabb359450f20c32ae03039d8736f12b1d561caf5 (patch)
tree6e8723885feb66a138f19f0ff31615dc13a8d859 /security
parentcb600d2f83c854ec3d6660063e4466431999489b (diff)
parent4e3dbdb1392a83bd21a6ff8f6bc785495058d37c (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1436 commits) cassini: Use local-mac-address prom property for Cassini MAC address net: remove the duplicate #ifdef __KERNEL__ net: bridge: check the length of skb after nf_bridge_maybe_copy_header() netconsole: clarify stopping message netconsole: don't announce stopping if nothing happened cnic: Fix the type field in SPQ messages netfilter: fix export secctx error handling netfilter: fix the race when initializing nf_ct_expect_hash_rnd ipv4: IP defragmentation must be ECN aware net: r6040: Return proper error for r6040_init_one dcb: use after free in dcb_flushapp() dcb: unlock on error in dcbnl_ieee_get() net: ixp4xx_eth: Return proper error for eth_init_one include/linux/if_ether.h: Add #define ETH_P_LINK_CTL for HPNA and wlan local tunnel net: add POLLPRI to sock_def_readable() af_unix: Avoid socket->sk NULL OOPS in stream connect security hooks. net_sched: pfifo_head_drop problem mac80211: remove stray extern mac80211: implement off-channel TX using hw r-o-c offload mac80211: implement hardware offload for remain-on-channel ...
Diffstat (limited to 'security')
-rw-r--r--security/capability.c2
-rw-r--r--security/security.c3
-rw-r--r--security/selinux/hooks.c22
-rw-r--r--security/smack/smack_lsm.c14
4 files changed, 20 insertions, 21 deletions
diff --git a/security/capability.c b/security/capability.c
index c773635ca3a0..2a5df2b7da83 100644
--- a/security/capability.c
+++ b/security/capability.c
@@ -548,7 +548,7 @@ static int cap_sem_semop(struct sem_array *sma, struct sembuf *sops,
548} 548}
549 549
550#ifdef CONFIG_SECURITY_NETWORK 550#ifdef CONFIG_SECURITY_NETWORK
551static int cap_unix_stream_connect(struct socket *sock, struct socket *other, 551static int cap_unix_stream_connect(struct sock *sock, struct sock *other,
552 struct sock *newsk) 552 struct sock *newsk)
553{ 553{
554 return 0; 554 return 0;
diff --git a/security/security.c b/security/security.c
index 1b798d3df710..e5fb07a3052d 100644
--- a/security/security.c
+++ b/security/security.c
@@ -977,8 +977,7 @@ EXPORT_SYMBOL(security_inode_getsecctx);
977 977
978#ifdef CONFIG_SECURITY_NETWORK 978#ifdef CONFIG_SECURITY_NETWORK
979 979
980int security_unix_stream_connect(struct socket *sock, struct socket *other, 980int security_unix_stream_connect(struct sock *sock, struct sock *other, struct sock *newsk)
981 struct sock *newsk)
982{ 981{
983 return security_ops->unix_stream_connect(sock, other, newsk); 982 return security_ops->unix_stream_connect(sock, other, newsk);
984} 983}
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 65fa8bf596f5..6f637d2678ac 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -3921,18 +3921,18 @@ static int selinux_socket_shutdown(struct socket *sock, int how)
3921 return sock_has_perm(current, sock->sk, SOCKET__SHUTDOWN); 3921 return sock_has_perm(current, sock->sk, SOCKET__SHUTDOWN);
3922} 3922}
3923 3923
3924static int selinux_socket_unix_stream_connect(struct socket *sock, 3924static int selinux_socket_unix_stream_connect(struct sock *sock,
3925 struct socket *other, 3925 struct sock *other,
3926 struct sock *newsk) 3926 struct sock *newsk)
3927{ 3927{
3928 struct sk_security_struct *sksec_sock = sock->sk->sk_security; 3928 struct sk_security_struct *sksec_sock = sock->sk_security;
3929 struct sk_security_struct *sksec_other = other->sk->sk_security; 3929 struct sk_security_struct *sksec_other = other->sk_security;
3930 struct sk_security_struct *sksec_new = newsk->sk_security; 3930 struct sk_security_struct *sksec_new = newsk->sk_security;
3931 struct common_audit_data ad; 3931 struct common_audit_data ad;
3932 int err; 3932 int err;
3933 3933
3934 COMMON_AUDIT_DATA_INIT(&ad, NET); 3934 COMMON_AUDIT_DATA_INIT(&ad, NET);
3935 ad.u.net.sk = other->sk; 3935 ad.u.net.sk = other;
3936 3936
3937 err = avc_has_perm(sksec_sock->sid, sksec_other->sid, 3937 err = avc_has_perm(sksec_sock->sid, sksec_other->sid,
3938 sksec_other->sclass, 3938 sksec_other->sclass,
@@ -4520,11 +4520,11 @@ static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,
4520 if (selinux_secmark_enabled()) 4520 if (selinux_secmark_enabled())
4521 if (avc_has_perm(sksec->sid, skb->secmark, 4521 if (avc_has_perm(sksec->sid, skb->secmark,
4522 SECCLASS_PACKET, PACKET__SEND, &ad)) 4522 SECCLASS_PACKET, PACKET__SEND, &ad))
4523 return NF_DROP; 4523 return NF_DROP_ERR(-ECONNREFUSED);
4524 4524
4525 if (selinux_policycap_netpeer) 4525 if (selinux_policycap_netpeer)
4526 if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto)) 4526 if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto))
4527 return NF_DROP; 4527 return NF_DROP_ERR(-ECONNREFUSED);
4528 4528
4529 return NF_ACCEPT; 4529 return NF_ACCEPT;
4530} 4530}
@@ -4581,7 +4581,7 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex,
4581 secmark_perm = PACKET__SEND; 4581 secmark_perm = PACKET__SEND;
4582 break; 4582 break;
4583 default: 4583 default:
4584 return NF_DROP; 4584 return NF_DROP_ERR(-ECONNREFUSED);
4585 } 4585 }
4586 if (secmark_perm == PACKET__FORWARD_OUT) { 4586 if (secmark_perm == PACKET__FORWARD_OUT) {
4587 if (selinux_skb_peerlbl_sid(skb, family, &peer_sid)) 4587 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,
4603 if (secmark_active) 4603 if (secmark_active)
4604 if (avc_has_perm(peer_sid, skb->secmark, 4604 if (avc_has_perm(peer_sid, skb->secmark,
4605 SECCLASS_PACKET, secmark_perm, &ad)) 4605 SECCLASS_PACKET, secmark_perm, &ad))
4606 return NF_DROP; 4606 return NF_DROP_ERR(-ECONNREFUSED);
4607 4607
4608 if (peerlbl_active) { 4608 if (peerlbl_active) {
4609 u32 if_sid; 4609 u32 if_sid;
@@ -4613,13 +4613,13 @@ static unsigned int selinux_ip_postroute(struct sk_buff *skb, int ifindex,
4613 return NF_DROP; 4613 return NF_DROP;
4614 if (avc_has_perm(peer_sid, if_sid, 4614 if (avc_has_perm(peer_sid, if_sid,
4615 SECCLASS_NETIF, NETIF__EGRESS, &ad)) 4615 SECCLASS_NETIF, NETIF__EGRESS, &ad))
4616 return NF_DROP; 4616 return NF_DROP_ERR(-ECONNREFUSED);
4617 4617
4618 if (sel_netnode_sid(addrp, family, &node_sid)) 4618 if (sel_netnode_sid(addrp, family, &node_sid))
4619 return NF_DROP; 4619 return NF_DROP;
4620 if (avc_has_perm(peer_sid, node_sid, 4620 if (avc_has_perm(peer_sid, node_sid,
4621 SECCLASS_NODE, NODE__SENDTO, &ad)) 4621 SECCLASS_NODE, NODE__SENDTO, &ad))
4622 return NF_DROP; 4622 return NF_DROP_ERR(-ECONNREFUSED);
4623 } 4623 }
4624 4624
4625 return NF_ACCEPT; 4625 return NF_ACCEPT;
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index 489a85afa477..ccb71a044a1a 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -2408,22 +2408,22 @@ static int smack_setprocattr(struct task_struct *p, char *name,
2408 2408
2409/** 2409/**
2410 * smack_unix_stream_connect - Smack access on UDS 2410 * smack_unix_stream_connect - Smack access on UDS
2411 * @sock: one socket 2411 * @sock: one sock
2412 * @other: the other socket 2412 * @other: the other sock
2413 * @newsk: unused 2413 * @newsk: unused
2414 * 2414 *
2415 * Return 0 if a subject with the smack of sock could access 2415 * Return 0 if a subject with the smack of sock could access
2416 * an object with the smack of other, otherwise an error code 2416 * an object with the smack of other, otherwise an error code
2417 */ 2417 */
2418static int smack_unix_stream_connect(struct socket *sock, 2418static int smack_unix_stream_connect(struct sock *sock,
2419 struct socket *other, struct sock *newsk) 2419 struct sock *other, struct sock *newsk)
2420{ 2420{
2421 struct inode *sp = SOCK_INODE(sock); 2421 struct inode *sp = SOCK_INODE(sock->sk_socket);
2422 struct inode *op = SOCK_INODE(other); 2422 struct inode *op = SOCK_INODE(other->sk_socket);
2423 struct smk_audit_info ad; 2423 struct smk_audit_info ad;
2424 2424
2425 smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_NET); 2425 smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_NET);
2426 smk_ad_setfield_u_net_sk(&ad, other->sk); 2426 smk_ad_setfield_u_net_sk(&ad, other);
2427 return smk_access(smk_of_inode(sp), smk_of_inode(op), 2427 return smk_access(smk_of_inode(sp), smk_of_inode(op),
2428 MAY_READWRITE, &ad); 2428 MAY_READWRITE, &ad);
2429} 2429}