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>
This commit is contained in:
committed by
David S. Miller
parent
db4374f48a
commit
c243d7e209
@@ -1454,8 +1454,8 @@ void sk_release_kernel(struct sock *sk)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
sock_hold(sk);
|
sock_hold(sk);
|
||||||
sock_release(sk->sk_socket);
|
|
||||||
sock_net_set(sk, get_net(&init_net));
|
sock_net_set(sk, get_net(&init_net));
|
||||||
|
sock_release(sk->sk_socket);
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(sk_release_kernel);
|
EXPORT_SYMBOL(sk_release_kernel);
|
||||||
|
|||||||
Reference in New Issue
Block a user