diff options
Diffstat (limited to 'net/unix')
-rw-r--r-- | net/unix/af_unix.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 2386090c3a16..10e73122c34c 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -594,7 +594,7 @@ static struct proto unix_proto = { | |||
594 | */ | 594 | */ |
595 | static struct lock_class_key af_unix_sk_receive_queue_lock_key; | 595 | static struct lock_class_key af_unix_sk_receive_queue_lock_key; |
596 | 596 | ||
597 | static struct sock * unix_create1(struct socket *sock) | 597 | static struct sock * unix_create1(struct net *net, struct socket *sock) |
598 | { | 598 | { |
599 | struct sock *sk = NULL; | 599 | struct sock *sk = NULL; |
600 | struct unix_sock *u; | 600 | struct unix_sock *u; |
@@ -602,7 +602,7 @@ static struct sock * unix_create1(struct socket *sock) | |||
602 | if (atomic_read(&unix_nr_socks) >= 2*get_max_files()) | 602 | if (atomic_read(&unix_nr_socks) >= 2*get_max_files()) |
603 | goto out; | 603 | goto out; |
604 | 604 | ||
605 | sk = sk_alloc(PF_UNIX, GFP_KERNEL, &unix_proto, 1); | 605 | sk = sk_alloc(net, PF_UNIX, GFP_KERNEL, &unix_proto, 1); |
606 | if (!sk) | 606 | if (!sk) |
607 | goto out; | 607 | goto out; |
608 | 608 | ||
@@ -628,8 +628,11 @@ out: | |||
628 | return sk; | 628 | return sk; |
629 | } | 629 | } |
630 | 630 | ||
631 | static int unix_create(struct socket *sock, int protocol) | 631 | static int unix_create(struct net *net, struct socket *sock, int protocol) |
632 | { | 632 | { |
633 | if (net != &init_net) | ||
634 | return -EAFNOSUPPORT; | ||
635 | |||
633 | if (protocol && protocol != PF_UNIX) | 636 | if (protocol && protocol != PF_UNIX) |
634 | return -EPROTONOSUPPORT; | 637 | return -EPROTONOSUPPORT; |
635 | 638 | ||
@@ -655,7 +658,7 @@ static int unix_create(struct socket *sock, int protocol) | |||
655 | return -ESOCKTNOSUPPORT; | 658 | return -ESOCKTNOSUPPORT; |
656 | } | 659 | } |
657 | 660 | ||
658 | return unix_create1(sock) ? 0 : -ENOMEM; | 661 | return unix_create1(net, sock) ? 0 : -ENOMEM; |
659 | } | 662 | } |
660 | 663 | ||
661 | static int unix_release(struct socket *sock) | 664 | static int unix_release(struct socket *sock) |
@@ -1039,7 +1042,7 @@ static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr, | |||
1039 | err = -ENOMEM; | 1042 | err = -ENOMEM; |
1040 | 1043 | ||
1041 | /* create new sock for complete connection */ | 1044 | /* create new sock for complete connection */ |
1042 | newsk = unix_create1(NULL); | 1045 | newsk = unix_create1(sk->sk_net, NULL); |
1043 | if (newsk == NULL) | 1046 | if (newsk == NULL) |
1044 | goto out; | 1047 | goto out; |
1045 | 1048 | ||