diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2024-05-09 13:04:33 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-09 13:04:33 -0400 | 
| commit | af44aa4947cedc7bf2c6199128bfd16affc292dc (patch) | |
| tree | 67341e6d7887206e51fbe41903814736e2646275 | |
| parent | fb66adb6807690e14f6afe01611f24d76f751234 (diff) | |
| parent | 35ce58772f50be512b945e5826119f149b8db361 (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.c | 35 | 
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);  | 
