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

David Lamparter equinox at opensourcerouting.org
Thu Dec 1 10:31:25 EST 2016


Applied.  If we need more to fix up VNC, it needs to go on top...

On Thu, Dec 01, 2016 at 09:11:12AM -0500, Donald Sharp wrote:
> 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
> 
> 
> _______________________________________________
> cmaster-next mailing list
> cmaster-next at lists.nox.tf
> https://lists.nox.tf/listinfo/cmaster-next




More information about the dev mailing list