[cmaster-next] [PATCH] bgpd: Fix crashes when no default bgp instance is configured.

Donald Sharp sharpd at cumulusnetworks.com
Thu Dec 1 09:11:12 EST 2016


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 at cumulusnetworks.com>
---
 bgpd/rfapi/rfapi_import.c   |  3 ++-
 bgpd/rfapi/vnc_import_bgp.c | 17 +++++++++++++++--
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/bgpd/rfapi/rfapi_import.c b/bgpd/rfapi/rfapi_import.c
index 8783024..77da4f9 100644
--- a/bgpd/rfapi/rfapi_import.c
+++ b/bgpd/rfapi/rfapi_import.c
@@ -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);
diff --git a/bgpd/rfapi/vnc_import_bgp.c b/bgpd/rfapi/vnc_import_bgp.c
index 4215ce2..dc2640a 100644
--- a/bgpd/rfapi/vnc_import_bgp.c
+++ b/bgpd/rfapi/vnc_import_bgp.c
@@ -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;
-- 
2.7.4





More information about the dev mailing list