When BGP route is short enough to be accepted but too long after local
changes, it is converted to withdraw. In these cases though, there was
a dangling pointer left from the prefix structure to the attribute
bucket.
That pointer is now pointing at the right place after the bucket gets
converted to withdraw.
Thanks to ix.br for catching and reporting this issue.
struct bgp_prefix *px = HEAD(b->prefixes);
log(L_ERR "%s: - withdrawing %N", p->p.name, px->ni->addr);
+ ASSERT_DIE(px->cur == b);
rem_node(&px->buck_node);
add_tail(&wb->prefixes, &px->buck_node);
+ px->cur = wb;
}
}