summaryrefslogtreecommitdiff
path: root/pimd/pim_rp.c
diff options
context:
space:
mode:
authorgithub login name <ranjany@vmware.com>2021-07-19 04:30:58 -0700
committergithub login name <ranjany@vmware.com>2021-07-19 04:30:58 -0700
commit906640dbafee986a5ac49d1089e49ac97770096f (patch)
tree07e924bdc256dcd4e380ecafa81d40cd5c245e38 /pimd/pim_rp.c
parent660b04429437416d71ec22dcc8bb798fdf45bec6 (diff)
pimd : memory leak in rp_table cleanup.
Problem Statement: ================== valgrind shows memleaks in rp_table, when pimd shuts down gracefully. 2020-05-05 22:09:29,451 ERROR: Memory leaks in router [r4] for daemon [pimd] 2020-05-05 22:09:29,451 ERROR: Memory leaks in router [r4] for daemon [zebra] 2020-05-05 22:09:29,637 ERROR: Found memory leak in module pimd 2020-05-05 22:09:29,638 ERROR: ==6178== 184 (56 direct, 128 indirect) bytes in 1 blocks are definitely lost in loss record 21 of 21 2020-05-05 22:09:29,638 ERROR: ==6178== at 0x4C2FFAC: calloc (vg_replace_malloc.c:762) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x4E855EE: qcalloc (memory.c:111) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x4EAA43C: route_table_init_with_delegate (table.c:52) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x1281A1: pim_rp_init (pim_rp.c:114) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x11D0F8: pim_instance_init (pim_instance.c:117) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x11D0F8: pim_vrf_new (pim_instance.c:150) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x4EB1BEC: vrf_get (vrf.c:209) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x4EB2B2F: vrf_init (vrf.c:493) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x11D227: pim_vrf_init (pim_instance.c:217) 2020-05-05 22:09:29,638 ERROR: ==6178== by 0x11BBAB: main (pim_main.c:121) Fix: ==== rp_info is allocated in pim_rp_init API. rp_info pointer is present in rp_list and rp_table. In rp_list cleanup, the memory for rp_info gets freed. rp_table clean up should be done first and then rp_list. Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
Diffstat (limited to 'pimd/pim_rp.c')
-rw-r--r--pimd/pim_rp.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c
index b6521132f7..d99e82de36 100644
--- a/pimd/pim_rp.c
+++ b/pimd/pim_rp.c
@@ -139,11 +139,12 @@ void pim_rp_init(struct pim_instance *pim)
void pim_rp_free(struct pim_instance *pim)
{
- if (pim->rp_list)
- list_delete(&pim->rp_list);
if (pim->rp_table)
route_table_finish(pim->rp_table);
pim->rp_table = NULL;
+
+ if (pim->rp_list)
+ list_delete(&pim->rp_list);
}
/*