summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <jafar@atcorp.com>2023-08-31 12:01:15 -0500
committerGitHub <noreply@github.com>2023-08-31 12:01:15 -0500
commit77b16f55a29ed740a64cd57a7c2db3683d541455 (patch)
tree93276d72368066aa3e4f3951031b731885d737fd
parentebc2054b3b7c46e89834b996907858c7cfbdbdd1 (diff)
parent98b8d08ca9c443fee79ab3b7563f69d2ae322354 (diff)
Merge pull request #14321 from opensourcerouting/fix/backport_530be6a4d089600f1028439ddec420ef651b983b_9.0
ospfd: Prevent use after free( and crash of ospf ) when no router ospf [backport]
-rw-r--r--ospfd/ospfd.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 51e937f42c..08044d63e5 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -801,25 +801,6 @@ static void ospf_finish_final(struct ospf *ospf)
ospf_area_free(area);
}
- /* Cancel all timers. */
- EVENT_OFF(ospf->t_read);
- EVENT_OFF(ospf->t_write);
- EVENT_OFF(ospf->t_spf_calc);
- EVENT_OFF(ospf->t_ase_calc);
- EVENT_OFF(ospf->t_maxage);
- EVENT_OFF(ospf->t_maxage_walker);
- EVENT_OFF(ospf->t_abr_task);
- EVENT_OFF(ospf->t_abr_fr);
- EVENT_OFF(ospf->t_asbr_check);
- EVENT_OFF(ospf->t_asbr_nssa_redist_update);
- EVENT_OFF(ospf->t_distribute_update);
- EVENT_OFF(ospf->t_lsa_refresher);
- EVENT_OFF(ospf->t_opaque_lsa_self);
- EVENT_OFF(ospf->t_sr_update);
- EVENT_OFF(ospf->t_default_routemap_timer);
- EVENT_OFF(ospf->t_external_aggr);
- EVENT_OFF(ospf->gr_info.t_grace_period);
-
LSDB_LOOP (OPAQUE_AS_LSDB(ospf), rn, lsa)
ospf_discard_from_db(ospf, ospf->lsdb, lsa);
LSDB_LOOP (EXTERNAL_LSDB(ospf), rn, lsa)
@@ -907,8 +888,26 @@ static void ospf_finish_final(struct ospf *ospf)
}
}
- route_table_finish(ospf->rt_aggr_tbl);
+ /* Cancel all timers. */
+ EVENT_OFF(ospf->t_read);
+ EVENT_OFF(ospf->t_write);
+ EVENT_OFF(ospf->t_spf_calc);
+ EVENT_OFF(ospf->t_ase_calc);
+ EVENT_OFF(ospf->t_maxage);
+ EVENT_OFF(ospf->t_maxage_walker);
+ EVENT_OFF(ospf->t_abr_task);
+ EVENT_OFF(ospf->t_abr_fr);
+ EVENT_OFF(ospf->t_asbr_check);
+ EVENT_OFF(ospf->t_asbr_nssa_redist_update);
+ EVENT_OFF(ospf->t_distribute_update);
+ EVENT_OFF(ospf->t_lsa_refresher);
+ EVENT_OFF(ospf->t_opaque_lsa_self);
+ EVENT_OFF(ospf->t_sr_update);
+ EVENT_OFF(ospf->t_default_routemap_timer);
+ EVENT_OFF(ospf->t_external_aggr);
+ EVENT_OFF(ospf->gr_info.t_grace_period);
+ route_table_finish(ospf->rt_aggr_tbl);
ospf_free_refresh_queue(ospf);