]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Improve handling in pim_rp_init
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 31 Aug 2017 13:03:49 +0000 (09:03 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 31 Aug 2017 14:30:19 +0000 (10:30 -0400)
When we are starting up improve the error handling of
pim_rp_init and fix some memory leaks.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_rp.c

index 05592992a9515df25a56e794df8566cc45f8282e..ff89a1bdd271a0da68ca1d6535bff7a189b5cced 100644 (file)
@@ -98,15 +98,24 @@ void pim_rp_init(struct pim_instance *pim)
        struct rp_info *rp_info;
 
        pim->rp_list = list_new();
+       if (!pim->rp_list) {
+               zlog_err("Unable to alloc rp_list");
+               return;
+       }
        pim->rp_list->del = (void (*)(void *))pim_rp_info_free;
        pim->rp_list->cmp = pim_rp_list_cmp;
 
        rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info));
 
-       if (!rp_info)
+       if (!rp_info) {
+               zlog_err("Unable to alloc rp_info");
+               list_delete(pim->rp_list);
                return;
+       }
 
        if (!str2prefix("224.0.0.0/4", &rp_info->group)) {
+               zlog_err("Unable to convert 224.0.0.0/4 to prefix");
+               list_delete(pim->rp_list);
                XFREE(MTYPE_PIM_RP, rp_info);
                return;
        }
@@ -554,6 +563,8 @@ int pim_rp_del(struct pim_instance *pim, const char *rp,
 
        listnode_delete(pim->rp_list, rp_info);
        pim_rp_refresh_group_to_rp_mapping(pim);
+
+       XFREE(MTYPE_PIM_RP, rp_info);
        return PIM_SUCCESS;
 }