]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes some crashes in OSPFv2.
authorOndrej Zajicek <santiago@crfreenet.org>
Sun, 29 Nov 2009 09:29:33 +0000 (10:29 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Sun, 29 Nov 2009 09:29:33 +0000 (10:29 +0100)
proto/ospf/rt.c

index a230d38f9be6465f28ad1fcccd3f27e722c04c95..2e1de440b278667680ecc94b1ccd564bfeaded76 100644 (file)
@@ -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 */