]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - net/core/sock_diag.c
net: make sock diag per-namespace
[mirror_ubuntu-zesty-kernel.git] / net / core / sock_diag.c
index 07a29eb34a415d81bb3571a0f17cf3b070ac3f39..9d8755e4a7a51e8415818f6c3542ef56c0697c08 100644 (file)
@@ -166,23 +166,36 @@ static void sock_diag_rcv(struct sk_buff *skb)
        mutex_unlock(&sock_diag_mutex);
 }
 
-struct sock *sock_diag_nlsk;
-EXPORT_SYMBOL_GPL(sock_diag_nlsk);
-
-static int __init sock_diag_init(void)
+static int __net_init diag_net_init(struct net *net)
 {
        struct netlink_kernel_cfg cfg = {
                .input  = sock_diag_rcv,
        };
 
-       sock_diag_nlsk = netlink_kernel_create(&init_net, NETLINK_SOCK_DIAG,
+       net->diag_nlsk = netlink_kernel_create(net, NETLINK_SOCK_DIAG,
                                               THIS_MODULE, &cfg);
-       return sock_diag_nlsk == NULL ? -ENOMEM : 0;
+       return net->diag_nlsk == NULL ? -ENOMEM : 0;
+}
+
+static void __net_exit diag_net_exit(struct net *net)
+{
+       netlink_kernel_release(net->diag_nlsk);
+       net->diag_nlsk = NULL;
+}
+
+static struct pernet_operations diag_net_ops = {
+       .init = diag_net_init,
+       .exit = diag_net_exit,
+};
+
+static int __init sock_diag_init(void)
+{
+       return register_pernet_subsys(&diag_net_ops);
 }
 
 static void __exit sock_diag_exit(void)
 {
-       netlink_kernel_release(sock_diag_nlsk);
+       unregister_pernet_subsys(&diag_net_ops);
 }
 
 module_init(sock_diag_init);