When generating updates for a peer that has 'rde evaluate all' set the
authorclaudio <claudio@openbsd.org>
Thu, 27 May 2021 08:45:24 +0000 (08:45 +0000)
committerclaudio <claudio@openbsd.org>
Thu, 27 May 2021 08:45:24 +0000 (08:45 +0000)
commit56d80c2c2a9bd3b28305b98c6f01bf8971e5098b
treeb358849f00e3fc4a1142777d13e23fa47a9c128c
parent2a36960f58919672e88bb3df2ba8f9396628eb6e
When generating updates for a peer that has 'rde evaluate all' set the
old prefix pointer is most probably NULL. If a secondary route is removed
the withdraw would not happen because old == NULL which skips the withdraw.

Access to old is only needed to extract the prefix. So instead extract the
prefix early and use it for both cases. So if 'rde evaluate all' is used
the code tries all prefixes and if none is allowed a withdraw is issued.

Problem noticed and fix tested by Pier Carlo Chiodi
usr.sbin/bgpd/rde_update.c