aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/sock.h
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-10-09 02:24:22 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:49:07 -0400
commit1b8d7ae42d02e483ad94035cca851e4f7fbecb40 (patch)
tree81f8cc0ee49ef99cc67dfed3dc7b7ecb510abf8b /include/net/sock.h
parent457c4cbc5a3dde259d2a1f15d5f9785290397267 (diff)
[NET]: Make socket creation namespace safe.
This patch passes in the namespace a new socket should be created in and has the socket code do the appropriate reference counting. By virtue of this all socket create methods are touched. In addition the socket create methods are modified so that they will fail if you attempt to create a socket in a non-default network namespace. Failing if we attempt to create a socket outside of the default network namespace ensures that as we incrementally make the network stack network namespace aware we will not export functionality that someone has not audited and made certain is network namespace safe. Allowing us to partially enable network namespaces before all of the exotic protocols are supported. Any protocol layers I have missed will fail to compile because I now pass an extra parameter into the socket creation code. [ Integrated AF_IUCV build fixes from Andrew Morton... -DaveM ] Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/sock.h')
-rw-r--r--include/net/sock.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/net/sock.h b/include/net/sock.h
index 9ef8b5fb7936..74e1f7d90d73 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -56,6 +56,7 @@
56#include <asm/atomic.h> 56#include <asm/atomic.h>
57#include <net/dst.h> 57#include <net/dst.h>
58#include <net/checksum.h> 58#include <net/checksum.h>
59#include <net/net_namespace.h>
59 60
60/* 61/*
61 * This structure really needs to be cleaned up. 62 * This structure really needs to be cleaned up.
@@ -776,7 +777,7 @@ extern void FASTCALL(release_sock(struct sock *sk));
776 SINGLE_DEPTH_NESTING) 777 SINGLE_DEPTH_NESTING)
777#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) 778#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock))
778 779
779extern struct sock *sk_alloc(int family, 780extern struct sock *sk_alloc(struct net *net, int family,
780 gfp_t priority, 781 gfp_t priority,
781 struct proto *prot, int zero_it); 782 struct proto *prot, int zero_it);
782extern void sk_free(struct sock *sk); 783extern void sk_free(struct sock *sk);
@@ -1005,6 +1006,7 @@ static inline void sock_copy(struct sock *nsk, const struct sock *osk)
1005#endif 1006#endif
1006 1007
1007 memcpy(nsk, osk, osk->sk_prot->obj_size); 1008 memcpy(nsk, osk, osk->sk_prot->obj_size);
1009 get_net(nsk->sk_net);
1008#ifdef CONFIG_SECURITY_NETWORK 1010#ifdef CONFIG_SECURITY_NETWORK
1009 nsk->sk_security = sptr; 1011 nsk->sk_security = sptr;
1010 security_sk_clone(osk, nsk); 1012 security_sk_clone(osk, nsk);