Merge tag 'net-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[sfrench/cifs-2.6.git] / net / ipv4 / route.c
index 6a3f57a3fa415f020487f75c93a85614a420b50f..66f419e7f9a7f3cab5328abb8c374686dccd2f19 100644 (file)
@@ -3593,6 +3593,7 @@ static struct ctl_table ipv4_route_netns_table[] = {
 static __net_init int sysctl_route_net_init(struct net *net)
 {
        struct ctl_table *tbl;
+       size_t table_size = ARRAY_SIZE(ipv4_route_netns_table);
 
        tbl = ipv4_route_netns_table;
        if (!net_eq(net, &init_net)) {
@@ -3604,8 +3605,10 @@ static __net_init int sysctl_route_net_init(struct net *net)
 
                /* Don't export non-whitelisted sysctls to unprivileged users */
                if (net->user_ns != &init_user_ns) {
-                       if (tbl[0].procname != ipv4_route_flush_procname)
+                       if (tbl[0].procname != ipv4_route_flush_procname) {
                                tbl[0].procname = NULL;
+                               table_size = 0;
+                       }
                }
 
                /* Update the variables to point into the current struct net
@@ -3616,7 +3619,8 @@ static __net_init int sysctl_route_net_init(struct net *net)
        }
        tbl[0].extra1 = net;
 
-       net->ipv4.route_hdr = register_net_sysctl(net, "net/ipv4/route", tbl);
+       net->ipv4.route_hdr = register_net_sysctl_sz(net, "net/ipv4/route",
+                                                    tbl, table_size);
        if (!net->ipv4.route_hdr)
                goto err_reg;
        return 0;