Skip to content

Commit 5d14c05

Browse files
committed
isisd: fix terminate() destruction order for DLIST callbacks
Move vrf_terminate() and prefix_list_reset() before isis_master_terminate(). Their callbacks (isis_vrf_disable, isis_prefix_list_update) iterate over im->isis list which is finalized by isis_master_terminate(). With typesafe DLIST, iterating a finalized list causes a SEGV crash. Signed-off-by: Vincent Jardin <vjardin@free.fr>
1 parent 64a62e4 commit 5d14c05

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

isisd/isis_main.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,20 @@ static FRR_NORETURN void terminate(int i)
108108
mt_fini();
109109
isis_zebra_stop();
110110

111-
isis_master_terminate();
111+
/*
112+
* Must call vrf_terminate and prefix_list_reset before
113+
* isis_master_terminate, because their callbacks (isis_vrf_disable,
114+
* isis_prefix_list_update) iterate over im->isis which is finalized
115+
* by isis_master_terminate.
116+
*/
112117
route_map_finish();
113118
prefix_list_reset();
119+
vrf_terminate();
120+
114121
#ifndef FABRICD
115122
isis_affinity_map_terminate();
116123
#endif
117-
vrf_terminate();
124+
isis_master_terminate();
118125

119126
frr_fini();
120127
exit(i);

0 commit comments

Comments
 (0)