Fixes serious bug in BGP add-path

Temporary rta is reused in BGP, while rta_lookup() breaks it.

Thanks to Alexander Chernikov for analysing the problem.
This commit is contained in:
Ondrej Zajicek 2015-03-02 10:58:20 +01:00
parent af454f9b7c
commit 509aab5deb

View file

@ -999,7 +999,11 @@ bgp_rte_update(struct bgp_proto *p, ip_addr prefix, int pxlen,
if (!*a) if (!*a)
{ {
a0->src = *src; a0->src = *src;
/* Workaround for rta_lookup() breaking eattrs */
ea_list *ea = a0->eattrs;
*a = rta_lookup(a0); *a = rta_lookup(a0);
a0->eattrs = ea;
} }
net *n = net_get(p->p.table, prefix, pxlen); net *n = net_get(p->p.table, prefix, pxlen);