summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <donaldsharp72@gmail.com>2024-05-09 13:04:33 -0400
committerGitHub <noreply@github.com>2024-05-09 13:04:33 -0400
commitaf44aa4947cedc7bf2c6199128bfd16affc292dc (patch)
tree67341e6d7887206e51fbe41903814736e2646275
parentfb66adb6807690e14f6afe01611f24d76f751234 (diff)
parent35ce58772f50be512b945e5826119f149b8db361 (diff)
Merge pull request #15978 from FRRouting/mergify/bp/stable/10.0/pr-15965
bgpd: Fix SRv6 memory leaks spotted by Address Sanitizer (backport #15965)
-rw-r--r--bgpd/bgpd.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index f6854202db..d6d874be21 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -1473,6 +1473,29 @@ static void bgp_srv6_init(struct bgp *bgp)
static void bgp_srv6_cleanup(struct bgp *bgp)
{
+ for (afi_t afi = AFI_IP; afi < AFI_MAX; afi++) {
+ if (bgp->vpn_policy[afi].tovpn_sid_locator != NULL)
+ srv6_locator_chunk_free(
+ &bgp->vpn_policy[afi].tovpn_sid_locator);
+ if (bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent != NULL)
+ XFREE(MTYPE_BGP_SRV6_SID,
+ bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent);
+ if (bgp->vpn_policy[afi].tovpn_sid != NULL) {
+ sid_unregister(bgp, bgp->vpn_policy[afi].tovpn_sid);
+ XFREE(MTYPE_BGP_SRV6_SID,
+ bgp->vpn_policy[afi].tovpn_sid);
+ }
+ }
+
+ if (bgp->tovpn_sid_locator != NULL)
+ srv6_locator_chunk_free(&bgp->tovpn_sid_locator);
+ if (bgp->tovpn_zebra_vrf_sid_last_sent != NULL)
+ XFREE(MTYPE_BGP_SRV6_SID, bgp->tovpn_zebra_vrf_sid_last_sent);
+ if (bgp->tovpn_sid != NULL) {
+ sid_unregister(bgp, bgp->tovpn_sid);
+ XFREE(MTYPE_BGP_SRV6_SID, bgp->tovpn_sid);
+ }
+
if (bgp->srv6_locator_chunks)
list_delete(&bgp->srv6_locator_chunks);
if (bgp->srv6_functions)
@@ -4097,18 +4120,6 @@ void bgp_free(struct bgp *bgp)
if (bgp->vpn_policy[afi].tovpn_rd_pretty)
XFREE(MTYPE_BGP_NAME,
bgp->vpn_policy[afi].tovpn_rd_pretty);
- if (bgp->vpn_policy[afi].tovpn_sid_locator != NULL)
- srv6_locator_chunk_free(
- &bgp->vpn_policy[afi].tovpn_sid_locator);
- if (bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent != NULL)
- XFREE(MTYPE_BGP_SRV6_SID,
- bgp->vpn_policy[afi]
- .tovpn_zebra_vrf_sid_last_sent);
- if (bgp->vpn_policy[afi].tovpn_sid != NULL) {
- sid_unregister(bgp, bgp->vpn_policy[afi].tovpn_sid);
- XFREE(MTYPE_BGP_SRV6_SID,
- bgp->vpn_policy[afi].tovpn_sid);
- }
}
bgp_srv6_cleanup(bgp);
bgp_confederation_id_unset(bgp);