diff options
author | Louis Scalbert <louis.scalbert@6wind.com> | 2023-04-27 14:50:47 +0200 |
---|---|---|
committer | Louis Scalbert <louis.scalbert@6wind.com> | 2023-04-27 15:39:23 +0200 |
commit | 771d544a5b45f8509761ff78c85020715579206d (patch) | |
tree | 96310941e76d6152569575a902024f79b40ab9f5 /isisd | |
parent | isisd, lib: clarify sizeof on flex-algo memory allocation (diff) | |
download | frr-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.c | 4 |
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); |