Skip to content

Commit 315c079

Browse files
committed
isisd: fix crash in isis_area_destroy destruction order
Move lsp_db_fini() before circuit list cleanup in isis_area_destroy(). The lsp_destroy() function iterates over circuit_list to remove LSPs from tx queues. With typesafe lists, a finalized list is invalid (not NULL), so accessing it causes a crash. Signed-off-by: Vincent Jardin <vjardin@free.fr>
1 parent a633f66 commit 315c079

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

isisd/isisd.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,11 @@ void isis_area_destroy(struct isis_area *area)
541541
if (fabricd)
542542
fabricd_finish(area->fabricd);
543543

544+
/* Must destroy LSP database before circuit list, because lsp_destroy
545+
* iterates over circuit_list to remove LSPs from tx queues */
546+
lsp_db_fini(&area->lspdb[0]);
547+
lsp_db_fini(&area->lspdb[1]);
548+
544549
frr_each_safe (isis_circuit_list, &area->circuit_list, circuit)
545550
isis_area_del_circuit(area, circuit);
546551

@@ -551,9 +556,6 @@ void isis_area_destroy(struct isis_area *area)
551556

552557
isis_area_adj_list_fini(&area->adjacency_list);
553558

554-
lsp_db_fini(&area->lspdb[0]);
555-
lsp_db_fini(&area->lspdb[1]);
556-
557559
/* invalidate and verify to delete all routes from zebra */
558560
isis_area_invalidate_routes(area, area->is_type);
559561
isis_area_verify_routes(area);

0 commit comments

Comments
 (0)