From 4dbf2038ea76f8ee697f9ec0d8f9aa5e7e5e69d9 Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Thu, 10 Feb 2022 01:15:57 +0300 Subject: [PATCH] bgpd: fix missing bgp_attr_flush on errors in bgp_update Signed-off-by: Igor Ryzhov --- bgpd/bgp_route.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 5bc2b8737e..ac70155f16 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -3930,6 +3930,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)) { peer->stat_pfx_nh_invalid++; reason = "self mac;"; + bgp_attr_flush(&new_attr); goto filtered; } @@ -3946,13 +3947,15 @@ int bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, && (!CHECK_FLAG(dest->flags, BGP_NODE_FIB_INSTALLED))) 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 * 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; + } + + attr_new = bgp_attr_intern(&new_attr); /* If the update is implicit withdraw. */ if (pi) { -- 2.39.5