]> git.proxmox.com Git - mirror_frr.git/commitdiff
isisd: fix a memory leak in isis_spftree_clear()
authorLouis Scalbert <louis.scalbert@6wind.com>
Thu, 27 Apr 2023 12:50:47 +0000 (14:50 +0200)
committerLouis Scalbert <louis.scalbert@6wind.com>
Thu, 27 Apr 2023 13:39:23 +0000 (15:39 +0200)
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>
isisd/isis_spf.c

index 466e96b3a2cc3e7161354c966d6958fe91896d20..3f19630b556cd3a00eac23bf826c59e99d74548f 100644 (file)
@@ -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);