[IPV6]: Fix inet6_init missing unregister.
authorDavid S. Miller <davem@davemloft.net>
Fri, 11 Nov 2005 23:05:47 +0000 (15:05 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 11 Nov 2005 23:05:47 +0000 (15:05 -0800)
Based mostly upon a patch from Olaf Kirch <okir@suse.de>

When initialization fails in inet6_init(), we should
unregister the PF_INET6 socket ops.

Also, check sock_register()'s return value for errors.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/af_inet6.c

index 4f8795af2edb68d950d909952f583ff0e3be8005..c63b8ce0e1b5fe646fee384f9508f2f14f45154a 100644 (file)
@@ -699,12 +699,14 @@ static int __init inet6_init(void)
        /* Register the family here so that the init calls below will
         * be able to create sockets. (?? is this dangerous ??)
         */
-       (void) sock_register(&inet6_family_ops);
+       err = sock_register(&inet6_family_ops);
+       if (err)
+               goto out_unregister_raw_proto;
 
        /* Initialise ipv6 mibs */
        err = init_ipv6_mibs();
        if (err)
-               goto out_unregister_raw_proto;
+               goto out_unregister_sock;
        
        /*
         *      ipngwg API draft makes clear that the correct semantics
@@ -796,6 +798,8 @@ icmp_fail:
        ipv6_sysctl_unregister();
 #endif
        cleanup_ipv6_mibs();
+out_unregister_sock:
+       sock_unregister(PF_INET6);
 out_unregister_raw_proto:
        proto_unregister(&rawv6_prot);
 out_unregister_udp_proto: