diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/af_inet6.c | 5 | ||||
-rw-r--r-- | net/ipv6/sysctl_net_ipv6.c | 9 |
2 files changed, 11 insertions, 3 deletions
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 34c20533ba5..a2842400a09 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -783,7 +783,9 @@ static int __init inet6_init(void) */ #ifdef CONFIG_SYSCTL - ipv6_sysctl_register(); + err = ipv6_sysctl_register(); + if (err) + goto sysctl_fail; #endif err = icmpv6_init(&inet6_family_ops); if (err) @@ -897,6 +899,7 @@ ndisc_fail: icmp_fail: #ifdef CONFIG_SYSCTL ipv6_sysctl_unregister(); +sysctl_fail: #endif cleanup_ipv6_mibs(); out_unregister_sock: diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c index 4ad8d9d3cb7..f713fbf34c2 100644 --- a/net/ipv6/sysctl_net_ipv6.c +++ b/net/ipv6/sysctl_net_ipv6.c @@ -91,10 +91,15 @@ EXPORT_SYMBOL_GPL(net_ipv6_ctl_path); static struct ctl_table_header *ipv6_sysctl_header; -void ipv6_sysctl_register(void) +int ipv6_sysctl_register(void) { ipv6_sysctl_header = register_sysctl_paths(net_ipv6_ctl_path, - ipv6_table); + ipv6_table); + if (!ipv6_sysctl_header) + return -ENOMEM; + + return 0; + } void ipv6_sysctl_unregister(void) |