aboutsummaryrefslogtreecommitdiffstats
path: root/net/econet/af_econet.c
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 /net/econet/af_econet.c
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 'net/econet/af_econet.c')
-rw-r--r--net/econet/af_econet.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c
index 35c96bcc0f32..a2429dbcb86e 100644
--- a/net/econet/af_econet.c
+++ b/net/econet/af_econet.c
@@ -608,12 +608,15 @@ static struct proto econet_proto = {
608 * Create an Econet socket 608 * Create an Econet socket
609 */ 609 */
610 610
611static int econet_create(struct socket *sock, int protocol) 611static int econet_create(struct net *net, struct socket *sock, int protocol)
612{ 612{
613 struct sock *sk; 613 struct sock *sk;
614 struct econet_sock *eo; 614 struct econet_sock *eo;
615 int err; 615 int err;
616 616
617 if (net != &init_net)
618 return -EAFNOSUPPORT;
619
617 /* Econet only provides datagram services. */ 620 /* Econet only provides datagram services. */
618 if (sock->type != SOCK_DGRAM) 621 if (sock->type != SOCK_DGRAM)
619 return -ESOCKTNOSUPPORT; 622 return -ESOCKTNOSUPPORT;
@@ -621,7 +624,7 @@ static int econet_create(struct socket *sock, int protocol)
621 sock->state = SS_UNCONNECTED; 624 sock->state = SS_UNCONNECTED;
622 625
623 err = -ENOBUFS; 626 err = -ENOBUFS;
624 sk = sk_alloc(PF_ECONET, GFP_KERNEL, &econet_proto, 1); 627 sk = sk_alloc(net, PF_ECONET, GFP_KERNEL, &econet_proto, 1);
625 if (sk == NULL) 628 if (sk == NULL)
626 goto out; 629 goto out;
627 630