]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Fix crashes when no default bgp instance is configured.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 1 Dec 2016 14:11:12 +0000 (09:11 -0500)
committerDavid Lamparter <equinox@opensourcerouting.org>
Thu, 1 Dec 2016 15:28:12 +0000 (16:28 +0100)
The vnc code assumes that bgp must have a default instance.
This code change checks to make sure that we do before
proceeding.  It makes no assurances that vnc will behave
correctly without a default instance.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
bgpd/rfapi/rfapi_import.c
bgpd/rfapi/vnc_import_bgp.c

index 8783024f168a6e916ba4e133f679376097ae4c7b..77da4f9eed57f8953ebaa6e1dd6b9e64595c13fc 100644 (file)
@@ -4414,7 +4414,8 @@ rfapiProcessPeerDown (struct peer *peer)
    */
 
   bgp = bgp_get_default ();     /* assume 1 instance for now */
-  assert (bgp);
+  if (!bgp)
+    return;
 
   h = bgp->rfapi;
   assert (h);
index 4215ce2bf78d5a27121d94221eb4cd3b0275f90b..dc2640ab9e4f06d6e684c30517ff96e6ccb7f003 100644 (file)
@@ -208,12 +208,17 @@ prefix_bag_free (void *pb)
 static void
 print_rhn_list (const char *tag1, const char *tag2)
 {
-  struct bgp *bgp = bgp_get_default ();
-  struct skiplist *sl = bgp->rfapi->resolve_nve_nexthop;
+  struct bgp *bgp;
+  struct skiplist *sl;
   struct skiplistnode *p;
   struct prefix_bag *pb;
   int count = 0;
 
+  bgp = bgp_get_default ();
+  if (!bgp)
+    return;
+
+  sl = bgp->frapi->resolve_nve_nexthop;
   if (!sl)
     {
       zlog_debug ("%s: %s: RHN List is empty", (tag1 ? tag1 : ""),
@@ -251,6 +256,8 @@ vnc_rhnck (char *tag)
   struct skiplistnode *p;
 
   bgp = bgp_get_default ();
+  if (!bgp)
+    return;
   sl = bgp->rfapi->resolve_nve_nexthop;
 
   if (!sl)
@@ -1798,6 +1805,9 @@ vnc_import_bgp_exterior_add_route_it (
   struct bgp *bgp_default = bgp_get_default ();
   afi_t afi = family2afi (prefix->family);
 
+  if (!bgp_default)
+    return;
+
   h = bgp_default->rfapi;
   hc = bgp_default->rfapi_cfg;
 
@@ -1992,6 +2002,9 @@ vnc_import_bgp_exterior_del_route (
   afi_t afi = family2afi (prefix->family);
   struct bgp *bgp_default = bgp_get_default ();
 
+  if (!bgp_default)
+    return;
+
   memset (&pfx_orig_nexthop, 0, sizeof (struct prefix));        /* keep valgrind happy */
 
   h = bgp_default->rfapi;