VPP-1533: Deleting a non-existent pre-resolved MAP next-hop causes VPP core dump 74/18174/2
authorOle Troan <ot@cisco.com>
Mon, 11 Mar 2019 08:47:31 +0000 (09:47 +0100)
committerNeale Ranns <nranns@cisco.com>
Mon, 11 Mar 2019 09:41:13 +0000 (09:41 +0000)
Change-Id: I6f0830b786ac46c69c867f73b044aab174e6210b
Signed-off-by: Ole Troan <ot@cisco.com>
src/plugins/map/map.c

index 2f13336..d77b141 100644 (file)
@@ -229,7 +229,7 @@ map_add_del_psid (u32 map_domain_index, u16 psid, ip6_address_t * tep,
 
 #ifdef MAP_SKIP_IP6_LOOKUP
 /**
- * Pre-resolvd per-protocol global next-hops
+ * Pre-resolved per-protocol global next-hops
  */
 map_main_pre_resolved_t pre_resolved[FIB_PROTOCOL_MAX];
 
@@ -351,14 +351,17 @@ map_fib_unresolve (map_main_pre_resolved_t * pr,
     .fp_addr = *addr,
   };
 
-  fib_entry_child_remove (pr->fei, pr->sibling);
+  if (pr->fei != FIB_NODE_INDEX_INVALID)
+    {
+      fib_entry_child_remove (pr->fei, pr->sibling);
 
-  fib_table_entry_special_remove (0,   // default fib
-                                 &pfx, FIB_SOURCE_RR);
-  dpo_reset (&pr->dpo);
+      fib_table_entry_special_remove (0,       // default fib
+                                     &pfx, FIB_SOURCE_RR);
+      dpo_reset (&pr->dpo);
 
-  pr->fei = FIB_NODE_INDEX_INVALID;
-  pr->sibling = FIB_NODE_INDEX_INVALID;
+      pr->fei = FIB_NODE_INDEX_INVALID;
+      pr->sibling = FIB_NODE_INDEX_INVALID;
+    }
 }
 
 void