mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-22 17:33:01 +00:00
net ipv6: Don't use sysctl tables with .child entries.
The sysctl core no longer natively understands sysctl tables with .child entries. Split the ipv6_table to remove the .child entries. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Acked-by: Pavel Emelyanov <xemul@parallels.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
64fb301040
commit
6dceb03687
@ -12,7 +12,9 @@ struct ctl_table_header;
|
||||
|
||||
struct netns_sysctl_ipv6 {
|
||||
#ifdef CONFIG_SYSCTL
|
||||
struct ctl_table_header *table;
|
||||
struct ctl_table_header *hdr;
|
||||
struct ctl_table_header *route_hdr;
|
||||
struct ctl_table_header *icmp_hdr;
|
||||
struct ctl_table_header *frags_hdr;
|
||||
#endif
|
||||
int bindv6only;
|
||||
|
@ -17,18 +17,6 @@
|
||||
#include <net/inet_frag.h>
|
||||
|
||||
static ctl_table ipv6_table_template[] = {
|
||||
{
|
||||
.procname = "route",
|
||||
.maxlen = 0,
|
||||
.mode = 0555,
|
||||
.child = ipv6_route_table_template
|
||||
},
|
||||
{
|
||||
.procname = "icmp",
|
||||
.maxlen = 0,
|
||||
.mode = 0555,
|
||||
.child = ipv6_icmp_table_template
|
||||
},
|
||||
{
|
||||
.procname = "bindv6only",
|
||||
.data = &init_net.ipv6.sysctl.bindv6only,
|
||||
@ -69,28 +57,37 @@ static int __net_init ipv6_sysctl_net_init(struct net *net)
|
||||
GFP_KERNEL);
|
||||
if (!ipv6_table)
|
||||
goto out;
|
||||
ipv6_table[0].data = &net->ipv6.sysctl.bindv6only;
|
||||
|
||||
ipv6_route_table = ipv6_route_sysctl_init(net);
|
||||
if (!ipv6_route_table)
|
||||
goto out_ipv6_table;
|
||||
ipv6_table[0].child = ipv6_route_table;
|
||||
|
||||
ipv6_icmp_table = ipv6_icmp_sysctl_init(net);
|
||||
if (!ipv6_icmp_table)
|
||||
goto out_ipv6_route_table;
|
||||
ipv6_table[1].child = ipv6_icmp_table;
|
||||
|
||||
ipv6_table[2].data = &net->ipv6.sysctl.bindv6only;
|
||||
|
||||
net->ipv6.sysctl.table = register_net_sysctl_table(net, net_ipv6_ctl_path,
|
||||
ipv6_table);
|
||||
if (!net->ipv6.sysctl.table)
|
||||
net->ipv6.sysctl.hdr = register_net_sysctl(net, "net/ipv6", ipv6_table);
|
||||
if (!net->ipv6.sysctl.hdr)
|
||||
goto out_ipv6_icmp_table;
|
||||
|
||||
net->ipv6.sysctl.route_hdr =
|
||||
register_net_sysctl(net, "net/ipv6/route", ipv6_route_table);
|
||||
if (!net->ipv6.sysctl.route_hdr)
|
||||
goto out_unregister_ipv6_table;
|
||||
|
||||
net->ipv6.sysctl.icmp_hdr =
|
||||
register_net_sysctl(net, "net/ipv6/icmp", ipv6_icmp_table);
|
||||
if (!net->ipv6.sysctl.icmp_hdr)
|
||||
goto out_unregister_route_table;
|
||||
|
||||
err = 0;
|
||||
out:
|
||||
return err;
|
||||
|
||||
out_unregister_route_table:
|
||||
unregister_net_sysctl_table(net->ipv6.sysctl.route_hdr);
|
||||
out_unregister_ipv6_table:
|
||||
unregister_net_sysctl_table(net->ipv6.sysctl.hdr);
|
||||
out_ipv6_icmp_table:
|
||||
kfree(ipv6_icmp_table);
|
||||
out_ipv6_route_table:
|
||||
@ -106,11 +103,13 @@ static void __net_exit ipv6_sysctl_net_exit(struct net *net)
|
||||
struct ctl_table *ipv6_route_table;
|
||||
struct ctl_table *ipv6_icmp_table;
|
||||
|
||||
ipv6_table = net->ipv6.sysctl.table->ctl_table_arg;
|
||||
ipv6_route_table = ipv6_table[0].child;
|
||||
ipv6_icmp_table = ipv6_table[1].child;
|
||||
ipv6_table = net->ipv6.sysctl.hdr->ctl_table_arg;
|
||||
ipv6_route_table = net->ipv6.sysctl.route_hdr->ctl_table_arg;
|
||||
ipv6_icmp_table = net->ipv6.sysctl.icmp_hdr->ctl_table_arg;
|
||||
|
||||
unregister_net_sysctl_table(net->ipv6.sysctl.table);
|
||||
unregister_net_sysctl_table(net->ipv6.sysctl.icmp_hdr);
|
||||
unregister_net_sysctl_table(net->ipv6.sysctl.route_hdr);
|
||||
unregister_net_sysctl_table(net->ipv6.sysctl.hdr);
|
||||
|
||||
kfree(ipv6_table);
|
||||
kfree(ipv6_route_table);
|
||||
|
Loading…
Reference in New Issue
Block a user