[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