From 093c928fc16fb4210c9371af68abbbf4ffb9bfa5 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 31 Aug 2017 09:03:49 -0400 Subject: [PATCH] pimd: Improve handling in pim_rp_init When we are starting up improve the error handling of pim_rp_init and fix some memory leaks. Signed-off-by: Donald Sharp --- pimd/pim_rp.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c index 05592992a9..ff89a1bdd2 100644 --- a/pimd/pim_rp.c +++ b/pimd/pim_rp.c @@ -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; } -- 2.39.5