]> Git Repo - linux.git/blobdiff - net/unix/sysctl_net_unix.c
regmap: mmio: Allow passing an empty config->reg_stride
[linux.git] / net / unix / sysctl_net_unix.c
index 01d44e2598e2e16e55cef23a9b687d8e3f05dcf3..500129aa710c73537cde5208a48e75842259ee04 100644 (file)
@@ -26,11 +26,16 @@ int __net_init unix_sysctl_register(struct net *net)
 {
        struct ctl_table *table;
 
-       table = kmemdup(unix_table, sizeof(unix_table), GFP_KERNEL);
-       if (table == NULL)
-               goto err_alloc;
+       if (net_eq(net, &init_net)) {
+               table = unix_table;
+       } else {
+               table = kmemdup(unix_table, sizeof(unix_table), GFP_KERNEL);
+               if (!table)
+                       goto err_alloc;
+
+               table[0].data = &net->unx.sysctl_max_dgram_qlen;
+       }
 
-       table[0].data = &net->unx.sysctl_max_dgram_qlen;
        net->unx.ctl = register_net_sysctl(net, "net/unix", table);
        if (net->unx.ctl == NULL)
                goto err_reg;
@@ -38,7 +43,8 @@ int __net_init unix_sysctl_register(struct net *net)
        return 0;
 
 err_reg:
-       kfree(table);
+       if (!net_eq(net, &init_net))
+               kfree(table);
 err_alloc:
        return -ENOMEM;
 }
@@ -49,5 +55,6 @@ void unix_sysctl_unregister(struct net *net)
 
        table = net->unx.ctl->ctl_table_arg;
        unregister_net_sysctl_table(net->unx.ctl);
-       kfree(table);
+       if (!net_eq(net, &init_net))
+               kfree(table);
 }
This page took 0.031574 seconds and 4 git commands to generate.