|
@@ -7273,21 +7273,36 @@ static int __init nf_tables_module_init(void)
|
|
|
{
|
|
|
int err;
|
|
|
|
|
|
- nft_chain_filter_init();
|
|
|
+ err = register_pernet_subsys(&nf_tables_net_ops);
|
|
|
+ if (err < 0)
|
|
|
+ return err;
|
|
|
+
|
|
|
+ err = nft_chain_filter_init();
|
|
|
+ if (err < 0)
|
|
|
+ goto err1;
|
|
|
|
|
|
err = nf_tables_core_module_init();
|
|
|
if (err < 0)
|
|
|
- return err;
|
|
|
+ goto err2;
|
|
|
|
|
|
- err = nfnetlink_subsys_register(&nf_tables_subsys);
|
|
|
+ err = register_netdevice_notifier(&nf_tables_flowtable_notifier);
|
|
|
if (err < 0)
|
|
|
- goto err;
|
|
|
+ goto err3;
|
|
|
|
|
|
- register_netdevice_notifier(&nf_tables_flowtable_notifier);
|
|
|
+ /* must be last */
|
|
|
+ err = nfnetlink_subsys_register(&nf_tables_subsys);
|
|
|
+ if (err < 0)
|
|
|
+ goto err4;
|
|
|
|
|
|
- return register_pernet_subsys(&nf_tables_net_ops);
|
|
|
-err:
|
|
|
+ return err;
|
|
|
+err4:
|
|
|
+ unregister_netdevice_notifier(&nf_tables_flowtable_notifier);
|
|
|
+err3:
|
|
|
nf_tables_core_module_exit();
|
|
|
+err2:
|
|
|
+ nft_chain_filter_fini();
|
|
|
+err1:
|
|
|
+ unregister_pernet_subsys(&nf_tables_net_ops);
|
|
|
return err;
|
|
|
}
|
|
|
|