bgpd: fix missing bgp_attr_flush on errors in bgp_update

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 4dbf2038ea)
This commit is contained in:
Igor Ryzhov 2022-02-10 01:15:57 +03:00 committed by mergify-bot
parent d992107a44
commit ae70f8c3db

View File

@ -3927,6 +3927,7 @@ int bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
if (bgp_mac_entry_exists(p) || bgp_mac_exist(&attr->rmac)) { if (bgp_mac_entry_exists(p) || bgp_mac_exist(&attr->rmac)) {
peer->stat_pfx_nh_invalid++; peer->stat_pfx_nh_invalid++;
reason = "self mac;"; reason = "self mac;";
bgp_attr_flush(&new_attr);
goto filtered; goto filtered;
} }
@ -3943,13 +3944,15 @@ int bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
&& (!CHECK_FLAG(dest->flags, BGP_NODE_FIB_INSTALLED))) && (!CHECK_FLAG(dest->flags, BGP_NODE_FIB_INSTALLED)))
SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING);
attr_new = bgp_attr_intern(&new_attr);
/* If maximum prefix count is configured and current prefix /* If maximum prefix count is configured and current prefix
* count exeed it. * count exeed it.
*/ */
if (bgp_maximum_prefix_overflow(peer, afi, safi, 0)) if (bgp_maximum_prefix_overflow(peer, afi, safi, 0)) {
bgp_attr_flush(&new_attr);
return -1; return -1;
}
attr_new = bgp_attr_intern(&new_attr);
/* If the update is implicit withdraw. */ /* If the update is implicit withdraw. */
if (pi) { if (pi) {