diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2015-05-08 22:11:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-05-11 10:50:18 -0400 |
commit | 13d3078e22f5651cd0184ce1b4e4ab8a46c62b27 (patch) | |
tree | b771d13192e3239d6a240e266e834dbdca647da1 /net/netlink | |
parent | 26abe14379f8e2fa3fd1bcf97c9a7ad9364886fe (diff) |
netlink: Create kernel netlink sockets in the proper network namespace
Utilize the new functionality of sk_alloc so that nothing needs to be
done to suprress the reference counting on kernel sockets.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlink')
-rw-r--r-- | net/netlink/af_netlink.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index be6665ab7f40..e9b9559731bb 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
@@ -2516,16 +2516,11 @@ __netlink_kernel_create(struct net *net, int unit, struct module *module, | |||
2516 | 2516 | ||
2517 | if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock)) | 2517 | if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock)) |
2518 | return NULL; | 2518 | return NULL; |
2519 | /* | 2519 | |
2520 | * We have to just have a reference on the net from sk, but don't | 2520 | if (__netlink_create(net, sock, cb_mutex, unit, 1) < 0) |
2521 | * get_net it. Besides, we cannot get and then put the net here. | ||
2522 | * So we create one inside init_net and the move it to net. | ||
2523 | */ | ||
2524 | if (__netlink_create(&init_net, sock, cb_mutex, unit, 0) < 0) | ||
2525 | goto out_sock_release_nosk; | 2521 | goto out_sock_release_nosk; |
2526 | 2522 | ||
2527 | sk = sock->sk; | 2523 | sk = sock->sk; |
2528 | sk_change_net(sk, net); | ||
2529 | 2524 | ||
2530 | if (!cfg || cfg->groups < 32) | 2525 | if (!cfg || cfg->groups < 32) |
2531 | groups = 32; | 2526 | groups = 32; |
@@ -2581,7 +2576,10 @@ EXPORT_SYMBOL(__netlink_kernel_create); | |||
2581 | void | 2576 | void |
2582 | netlink_kernel_release(struct sock *sk) | 2577 | netlink_kernel_release(struct sock *sk) |
2583 | { | 2578 | { |
2584 | sk_release_kernel(sk); | 2579 | if (sk == NULL || sk->sk_socket == NULL) |
2580 | return; | ||
2581 | |||
2582 | sock_release(sk->sk_socket); | ||
2585 | } | 2583 | } |
2586 | EXPORT_SYMBOL(netlink_kernel_release); | 2584 | EXPORT_SYMBOL(netlink_kernel_release); |
2587 | 2585 | ||