]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Prevent ecomm memory leak
authorDonald Sharp <sharpd@nvidia.com>
Tue, 27 Oct 2020 19:16:32 +0000 (15:16 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Tue, 27 Oct 2020 19:16:32 +0000 (15:16 -0400)
There are some situations where we create a ecommunity for
comparing to internal state when we are deleting, but in the
failure cases we would not free up the created memory.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd/bgp_evpn_vty.c

index b2491e1187cb4c15a13da54bf6f50a10b2b90810..e9e2aafebbec174a26973ef40e55f6306b58e2f5 100644 (file)
@@ -5297,6 +5297,7 @@ DEFUN (no_bgp_evpn_vrf_rt,
        if (rt_type == RT_TYPE_IMPORT) {
                if (!bgp_evpn_rt_matches_existing(bgp->vrf_import_rtl,
                                                  ecomdel)) {
+                       ecommunity_free(&ecomdel);
                        vty_out(vty,
                                "%% RT specified does not match configuration for this VRF\n");
                        return CMD_WARNING;
@@ -5305,6 +5306,7 @@ DEFUN (no_bgp_evpn_vrf_rt,
        } else if (rt_type == RT_TYPE_EXPORT) {
                if (!bgp_evpn_rt_matches_existing(bgp->vrf_export_rtl,
                                                  ecomdel)) {
+                       ecommunity_free(&ecomdel);
                        vty_out(vty,
                                "%% RT specified does not match configuration for this VRF\n");
                        return CMD_WARNING;
@@ -5326,12 +5328,14 @@ DEFUN (no_bgp_evpn_vrf_rt,
                }
 
                if (!found_ecomdel) {
+                       ecommunity_free(&ecomdel);
                        vty_out(vty,
                                "%% RT specified does not match configuration for this VRF\n");
                        return CMD_WARNING;
                }
        }
 
+       ecommunity_free(&ecomdel);
        return CMD_SUCCESS;
 }