tunnels: fix netns vs proto registration ordering
Same stuff as in ip_gre patch: receive hook can be called before netns setup is done, oopsing in net_generic(). Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
c2892f0271
commit
d5aa407f59
@@ -1461,27 +1461,29 @@ static int __init ip6_tunnel_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (xfrm6_tunnel_register(&ip4ip6_handler, AF_INET)) {
|
||||
printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n");
|
||||
err = -EAGAIN;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6)) {
|
||||
printk(KERN_ERR "ip6_tunnel init: can't register ip6ip6\n");
|
||||
err = -EAGAIN;
|
||||
goto unreg_ip4ip6;
|
||||
}
|
||||
|
||||
err = register_pernet_device(&ip6_tnl_net_ops);
|
||||
if (err < 0)
|
||||
goto err_pernet;
|
||||
goto out_pernet;
|
||||
|
||||
err = xfrm6_tunnel_register(&ip4ip6_handler, AF_INET);
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n");
|
||||
goto out_ip4ip6;
|
||||
}
|
||||
|
||||
err = xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6);
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR "ip6_tunnel init: can't register ip6ip6\n");
|
||||
goto out_ip6ip6;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err_pernet:
|
||||
xfrm6_tunnel_deregister(&ip6ip6_handler, AF_INET6);
|
||||
unreg_ip4ip6:
|
||||
|
||||
out_ip6ip6:
|
||||
xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET);
|
||||
out:
|
||||
out_ip4ip6:
|
||||
unregister_pernet_device(&ip6_tnl_net_ops);
|
||||
out_pernet:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user