summaryrefslogtreecommitdiffstats
path: root/isisd
diff options
context:
space:
mode:
authorLouis Scalbert <louis.scalbert@6wind.com>2023-04-27 14:50:47 +0200
committerLouis Scalbert <louis.scalbert@6wind.com>2023-04-27 15:39:23 +0200
commit771d544a5b45f8509761ff78c85020715579206d (patch)
tree96310941e76d6152569575a902024f79b40ab9f5 /isisd
parentisisd, lib: clarify sizeof on flex-algo memory allocation (diff)
downloadfrr-771d544a5b45f8509761ff78c85020715579206d.tar.xz
frr-771d544a5b45f8509761ff78c85020715579206d.zip
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 <louis.scalbert@6wind.com>
Diffstat (limited to 'isisd')
-rw-r--r--isisd/isis_spf.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c
index 466e96b3a..3f19630b5 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);