summaryrefslogtreecommitdiffstats
path: root/bgpd
diff options
context:
space:
mode:
authorChristian Franke <chris@opensourcerouting.org>2013-01-28 07:14:43 +0100
committerDavid Lamparter <equinox@opensourcerouting.org>2013-02-01 17:55:04 +0100
commitd53d8fda42e1ce43852d3b4cff914ce79b5c6785 (patch)
tree65fabd06d7388d593c1260c18558acd29c82b523 /bgpd
parenttests: fix missing init in bgp_mp_attr_test.c (diff)
downloadfrr-d53d8fda42e1ce43852d3b4cff914ce79b5c6785.tar.xz
frr-d53d8fda42e1ce43852d3b4cff914ce79b5c6785.zip
bgpd: fix crash in soft-reconfiguration
Commit 8692c50652 introduced a bug where bgpd would crash on soft-reconfiguration. This happens e.g. when there are filtered unicast routes because rn->info is NULL in that case, which the code did not account for. Reported-by: Paweł Staszewski <pstaszewski@itcare.pl> Signed-off-by: Christian Franke <chris@opensourcerouting.org> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'bgpd')
-rw-r--r--bgpd/bgp_route.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 8bc72d7be..fb35fab82 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -2643,10 +2643,10 @@ bgp_soft_reconfig_table_rsclient (struct peer *rsclient, afi_t afi,
for (ain = rn->adj_in; ain; ain = ain->next)
{
struct bgp_info *ri = rn->info;
+ u_char *tag = (ri && ri->extra) ? ri->extra->tag : NULL;
bgp_update_rsclient (rsclient, afi, safi, ain->attr, ain->peer,
- &rn->p, ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, prd,
- (bgp_info_extra_get (ri))->tag);
+ &rn->p, ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, prd, tag);
}
}
@@ -2690,10 +2690,11 @@ bgp_soft_reconfig_table (struct peer *peer, afi_t afi, safi_t safi,
if (ain->peer == peer)
{
struct bgp_info *ri = rn->info;
+ u_char *tag = (ri && ri->extra) ? ri->extra->tag : NULL;
ret = bgp_update (peer, &rn->p, ain->attr, afi, safi,
ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL,
- prd, (bgp_info_extra_get (ri))->tag, 1);
+ prd, tag, 1);
if (ret < 0)
{