From 771d544a5b45f8509761ff78c85020715579206d Mon Sep 17 00:00:00 2001 From: Louis Scalbert Date: Thu, 27 Apr 2023 14:50:47 +0200 Subject: [PATCH] isisd: fix a memory leak in isis_spftree_clear() isis_spftree_clear() calls: - _isis_spftree_del() to partially delete a spftree instance without freeing spftree->route_table and spftree->route_table_backup. - then _isis_spftree_init() that allocates new spftree->route_table and spftree->route_table_backup. As a consequence, the previous table instances are not referenced and not freed. Free the route tables before allocating new ones. Fixes: 860b75b40e ("isisd: calculate flex-algo constraint spf") Signed-off-by: Louis Scalbert --- isisd/isis_spf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c index 466e96b3a2..3f19630b55 100644 --- a/isisd/isis_spf.c +++ b/isisd/isis_spf.c @@ -393,14 +393,14 @@ static void _isis_spftree_del(struct isis_spftree *spftree) isis_vertex_queue_free(&spftree->paths); isis_route_table_info_free(spftree->route_table->info); isis_route_table_info_free(spftree->route_table_backup->info); + route_table_finish(spftree->route_table); + route_table_finish(spftree->route_table_backup); } void isis_spftree_del(struct isis_spftree *spftree) { _isis_spftree_del(spftree); - route_table_finish(spftree->route_table); - route_table_finish(spftree->route_table_backup); spftree->route_table = NULL; XFREE(MTYPE_ISIS_SPFTREE, spftree);