mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +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 {
|
struct netns_sysctl_ipv6 {
|
||||||
#ifdef CONFIG_SYSCTL
|
#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;
|
struct ctl_table_header *frags_hdr;
|
||||||
#endif
|
#endif
|
||||||
int bindv6only;
|
int bindv6only;
|
||||||
|
@ -17,18 +17,6 @@
|
|||||||
#include <net/inet_frag.h>
|
#include <net/inet_frag.h>
|
||||||
|
|
||||||
static ctl_table ipv6_table_template[] = {
|
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",
|
.procname = "bindv6only",
|
||||||
.data = &init_net.ipv6.sysctl.bindv6only,
|
.data = &init_net.ipv6.sysctl.bindv6only,
|
||||||
@ -69,28 +57,37 @@ static int __net_init ipv6_sysctl_net_init(struct net *net)
|
|||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!ipv6_table)
|
if (!ipv6_table)
|
||||||
goto out;
|
goto out;
|
||||||
|
ipv6_table[0].data = &net->ipv6.sysctl.bindv6only;
|
||||||
|
|
||||||
ipv6_route_table = ipv6_route_sysctl_init(net);
|
ipv6_route_table = ipv6_route_sysctl_init(net);
|
||||||
if (!ipv6_route_table)
|
if (!ipv6_route_table)
|
||||||
goto out_ipv6_table;
|
goto out_ipv6_table;
|
||||||
ipv6_table[0].child = ipv6_route_table;
|
|
||||||
|
|
||||||
ipv6_icmp_table = ipv6_icmp_sysctl_init(net);
|
ipv6_icmp_table = ipv6_icmp_sysctl_init(net);
|
||||||
if (!ipv6_icmp_table)
|
if (!ipv6_icmp_table)
|
||||||
goto out_ipv6_route_table;
|
goto out_ipv6_route_table;
|
||||||
ipv6_table[1].child = ipv6_icmp_table;
|
|
||||||
|
|
||||||
ipv6_table[2].data = &net->ipv6.sysctl.bindv6only;
|
net->ipv6.sysctl.hdr = register_net_sysctl(net, "net/ipv6", ipv6_table);
|
||||||
|
if (!net->ipv6.sysctl.hdr)
|
||||||
net->ipv6.sysctl.table = register_net_sysctl_table(net, net_ipv6_ctl_path,
|
|
||||||
ipv6_table);
|
|
||||||
if (!net->ipv6.sysctl.table)
|
|
||||||
goto out_ipv6_icmp_table;
|
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;
|
err = 0;
|
||||||
out:
|
out:
|
||||||
return err;
|
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:
|
out_ipv6_icmp_table:
|
||||||
kfree(ipv6_icmp_table);
|
kfree(ipv6_icmp_table);
|
||||||
out_ipv6_route_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_route_table;
|
||||||
struct ctl_table *ipv6_icmp_table;
|
struct ctl_table *ipv6_icmp_table;
|
||||||
|
|
||||||
ipv6_table = net->ipv6.sysctl.table->ctl_table_arg;
|
ipv6_table = net->ipv6.sysctl.hdr->ctl_table_arg;
|
||||||
ipv6_route_table = ipv6_table[0].child;
|
ipv6_route_table = net->ipv6.sysctl.route_hdr->ctl_table_arg;
|
||||||
ipv6_icmp_table = ipv6_table[1].child;
|
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_table);
|
||||||
kfree(ipv6_route_table);
|
kfree(ipv6_route_table);
|
||||||
|
Loading…
Reference in New Issue
Block a user