From 4b84bd4554b2a9331055bfd8d02a0bab0d10df92 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Sun, 29 Nov 2009 10:29:33 +0100 Subject: [PATCH] Fixes some crashes in OSPFv2. --- proto/ospf/rt.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index a230d38f..2e1de440 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -776,6 +776,8 @@ add_cand(list * l, struct top_hash_entry *en, struct top_hash_entry *par, node *prev, *n; int added = 0; struct top_hash_entry *act; + ip_addr old_nh; + struct ospf_iface *old_nhi; if (en == NULL) return; @@ -798,13 +800,20 @@ add_cand(list * l, struct top_hash_entry *en, struct top_hash_entry *par, DBG(" Adding candidate: rt: %R, id: %R, type: %u\n", en->lsa.rt, en->lsa.id, en->lsa.type); + old_nhi = en->nhi; + old_nh = en->nh; + en->nhi = NULL; en->nh = IPA_NONE; - calc_next_hop(en, par, oa); if (!en->nhi) - return; /* We cannot find next hop, ignore it */ + { + /* No next hop found, we undo changes and return */ + en->nhi = old_nhi; + en->nh = old_nh; + return; + } if (en->color == CANDIDATE) { /* We found a shorter path */