This patch adds some error handling for the main init function. It
checks the return values of all the function calls that provide return
values.

Signed-off-by: Markus Pargmann <[email protected]>
---
 main.c | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/main.c b/main.c
index a9e09e852c4b..65021ea567e8 100644
--- a/main.c
+++ b/main.c
@@ -59,29 +59,47 @@ static void batadv_recv_handler_init(void);
 
 static int __init batadv_init(void)
 {
+       int ret;
+
        INIT_LIST_HEAD(&batadv_hardif_list);
        INIT_HLIST_HEAD(&batadv_algo_list);
 
        batadv_recv_handler_init();
 
-       batadv_iv_init();
-       batadv_nc_init();
+       ret = batadv_iv_init();
+       if (ret)
+               return ret;
+
+       ret = batadv_nc_init();
+       if (ret)
+               return ret;
 
        batadv_event_workqueue = create_singlethread_workqueue("bat_events");
-
        if (!batadv_event_workqueue)
                return -ENOMEM;
 
        batadv_socket_init();
        batadv_debugfs_init();
 
-       register_netdevice_notifier(&batadv_hard_if_notifier);
-       rtnl_link_register(&batadv_link_ops);
+       ret = register_netdevice_notifier(&batadv_hard_if_notifier);
+       if (ret)
+               goto err_netdev_notifier;
+
+       ret = rtnl_link_register(&batadv_link_ops);
+       if (ret)
+               goto err_link_register;
 
        pr_info("B.A.T.M.A.N. advanced %s (compatibility version %i) loaded\n",
                BATADV_SOURCE_VERSION, BATADV_COMPAT_VERSION);
 
        return 0;
+
+err_link_register:
+       unregister_netdevice_notifier(&batadv_hard_if_notifier);
+err_netdev_notifier:
+       batadv_debugfs_destroy();
+
+       return ret;
 }
 
 static void __exit batadv_exit(void)
-- 
2.1.3

Reply via email to