From: Don Slice Date: Wed, 3 May 2017 13:15:20 +0000 (-0700) Subject: bgpd: resolve crash in workqueue processing due to invalid safi X-Git-Tag: reindent-master-before~200^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=25c3f3f61144b44d3ed210c9cff46827e9eef9fd;p=matthieu%2Ffrr.git bgpd: resolve crash in workqueue processing due to invalid safi Crash uncovered when workqueue item was pulled with safi set to 7 (SAFI_LABELED_UNICAST) without labled-unicast being configured. Also fixed minor issue removing aggregate-address command due to bad index. Ticket: CM-16169 Signed-off-by: Don Slice Reviewed-by: Donald Sharp --- diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 3f4f1324f8..f327e34f2a 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -5757,11 +5757,11 @@ bgp_aggregate_unset (struct vty *vty, const char *prefix_str, } aggregate = rn->info; - if (aggregate->safi & SAFI_UNICAST) + if (aggregate->safi == SAFI_UNICAST) bgp_aggregate_delete (bgp, &p, afi, SAFI_UNICAST, aggregate); - if (aggregate->safi & SAFI_LABELED_UNICAST) + if (aggregate->safi == SAFI_LABELED_UNICAST) bgp_aggregate_delete (bgp, &p, afi, SAFI_LABELED_UNICAST, aggregate); - if (aggregate->safi & SAFI_MULTICAST) + if (aggregate->safi == SAFI_MULTICAST) bgp_aggregate_delete (bgp, &p, afi, SAFI_MULTICAST, aggregate); /* Unlock aggregate address configuration. */ @@ -5817,11 +5817,11 @@ bgp_aggregate_set (struct vty *vty, const char *prefix_str, rn->info = aggregate; /* Aggregate address insert into BGP routing table. */ - if (safi & SAFI_UNICAST) + if (safi == SAFI_UNICAST) bgp_aggregate_add (bgp, &p, afi, SAFI_UNICAST, aggregate); - if (safi & SAFI_LABELED_UNICAST) + if (safi == SAFI_LABELED_UNICAST) bgp_aggregate_add (bgp, &p, afi, SAFI_LABELED_UNICAST, aggregate); - if (safi & SAFI_MULTICAST) + if (safi == SAFI_MULTICAST) bgp_aggregate_add (bgp, &p, afi, SAFI_MULTICAST, aggregate); return CMD_SUCCESS; @@ -5910,7 +5910,7 @@ DEFUN (no_aggregate_address_mask, int idx = 0; argv_find (argv, argc, "A.B.C.D", &idx); char *prefix = argv[idx]->arg; - char *mask = argv[idx++]->arg; + char *mask = argv[idx+1]->arg; char prefix_str[BUFSIZ]; int ret = netmask_str2prefix_str (prefix, mask, prefix_str);