up_dump_prefix() should not clear the p->flags before possibly calling
authorclaudio <claudio@openbsd.org>
Tue, 1 Mar 2022 09:53:42 +0000 (09:53 +0000)
committerclaudio <claudio@openbsd.org>
Tue, 1 Mar 2022 09:53:42 +0000 (09:53 +0000)
commitbe0518f70e5b2880e0e8f1f34f8efc7766b57403
treea266390663b6054ae10d5a6cd541021921ee6d81
parent591142c4598a6a0f1610de3339e87106e94adb53
up_dump_prefix() should not clear the p->flags before possibly calling
prefix_adjout_destroy(). Doing so will restult in a double pt_unref()
call because prefix_adjout_destroy() no longer notices that the prefix
was an actuall withdraw and wrongly calls prefix_unlink().
For updates the PREFIX_FLAG_UPDATE flag needs to be cleared after
removing the prefix from the update RB tree.
Adjust the EoR codepath in a similar way. EoR have a NULL pt_entry and
so prefix_adjout_destroy() is unable to do the RB_REMOVE.
This fixes the regress errors reported by anton@
OK tb@
usr.sbin/bgpd/rde_update.c