summaryrefslogtreecommitdiffstats
path: root/net/core/sock.c
diff options
context:
space:
mode:
authorYing Xue2015-03-16 11:19:12 +0100
committerDavid S. Miller2015-03-16 21:25:06 +0100
commitc243d7e20996254f89c28d4838b5feca735c030d (patch)
tree13ce4c9af9215945e69a86300039396bfb1f04cd /net/core/sock.c
parentrhashtable: Annotate RCU locking of walkers (diff)
downloadkernel-qcow2-linux-c243d7e20996254f89c28d4838b5feca735c030d.tar.gz
kernel-qcow2-linux-c243d7e20996254f89c28d4838b5feca735c030d.tar.xz
kernel-qcow2-linux-c243d7e20996254f89c28d4838b5feca735c030d.zip
net: kernel socket should be released in init_net namespace
Creating a kernel socket with sock_create_kern() happens in "init_net" namespace, however, releasing it with sk_release_kernel() occurs in the current namespace which may be different with "init_net" namespace. Therefore, we should guarantee that the namespace in which a kernel socket is created is same as the socket is created. Signed-off-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/sock.c')
-rw-r--r--net/core/sock.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/sock.c b/net/core/sock.c
index a950b54248da..d9f9e4825362 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1454,8 +1454,8 @@ void sk_release_kernel(struct sock *sk)
return;
sock_hold(sk);
- sock_release(sk->sk_socket);
sock_net_set(sk, get_net(&init_net));
+ sock_release(sk->sk_socket);
sock_put(sk);
}
EXPORT_SYMBOL(sk_release_kernel);