packet: Fix error path in packet_init
[linux-2.6-block.git] / net / packet / af_packet.c
index 90d4e3ce00e51a48406ee48ccb251f310f47337d..fbc775fbf7128f4d7253ad7e94e632bbe003eb9e 100644 (file)
@@ -4598,14 +4598,29 @@ static void __exit packet_exit(void)
 
 static int __init packet_init(void)
 {
-       int rc = proto_register(&packet_proto, 0);
+       int rc;
 
-       if (rc != 0)
+       rc = proto_register(&packet_proto, 0);
+       if (rc)
                goto out;
+       rc = sock_register(&packet_family_ops);
+       if (rc)
+               goto out_proto;
+       rc = register_pernet_subsys(&packet_net_ops);
+       if (rc)
+               goto out_sock;
+       rc = register_netdevice_notifier(&packet_netdev_notifier);
+       if (rc)
+               goto out_pernet;
 
-       sock_register(&packet_family_ops);
-       register_pernet_subsys(&packet_net_ops);
-       register_netdevice_notifier(&packet_netdev_notifier);
+       return 0;
+
+out_pernet:
+       unregister_pernet_subsys(&packet_net_ops);
+out_sock:
+       sock_unregister(PF_PACKET);
+out_proto:
+       proto_unregister(&packet_proto);
 out:
        return rc;
 }