diff options
author | John Lo <loj@cisco.com> | 2018-09-13 15:08:08 -0400 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2018-09-14 05:03:42 +0000 |
commit | d23d39cc012e5b1075a2323d6e940ae5ad43de46 (patch) | |
tree | 2f2c4f4ba593e08607ec8a0d1728b53983727934 /src/vnet/srmpls | |
parent | 12a30202ec213d1ffbee503e61b1cec0bc4861bb (diff) |
Fix memory leak in API/CLI to create/modify SR policies
The segment list vector built by the API/CLI is not freed after
SR policy creation or modification.
Change-Id: If439005481cada6c6af7cb560fe7a4381dd49384
Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'src/vnet/srmpls')
-rw-r--r-- | src/vnet/srmpls/sr_mpls_api.c | 2 | ||||
-rwxr-xr-x | src/vnet/srmpls/sr_mpls_policy.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/src/vnet/srmpls/sr_mpls_api.c b/src/vnet/srmpls/sr_mpls_api.c index a6294e391b6..2c36c0dd9f2 100644 --- a/src/vnet/srmpls/sr_mpls_api.c +++ b/src/vnet/srmpls/sr_mpls_api.c @@ -67,6 +67,7 @@ vl_api_sr_mpls_policy_add_t_handler (vl_api_sr_mpls_policy_add_t * mp) int rv = 0; rv = sr_mpls_policy_add (ntohl (mp->bsid), segments, mp->type, ntohl (mp->weight)); + vec_free (segments); REPLY_MACRO (VL_API_SR_MPLS_POLICY_ADD_REPLY); } @@ -91,6 +92,7 @@ vl_api_sr_mpls_policy_mod_t_handler (vl_api_sr_mpls_policy_mod_t * mp) rv = sr_mpls_policy_mod (ntohl (mp->bsid), mp->operation, segments, ntohl (mp->sl_index), ntohl (mp->weight)); + vec_free (segments); REPLY_MACRO (VL_API_SR_MPLS_POLICY_MOD_REPLY); } diff --git a/src/vnet/srmpls/sr_mpls_policy.c b/src/vnet/srmpls/sr_mpls_policy.c index 86cd169716a..8fc7e730e47 100755 --- a/src/vnet/srmpls/sr_mpls_policy.c +++ b/src/vnet/srmpls/sr_mpls_policy.c @@ -502,6 +502,7 @@ sr_mpls_policy_command_fn (vlib_main_t * vm, unformat_input_t * input, rv = sr_mpls_policy_add (bsid, segments, (is_spray ? SR_POLICY_TYPE_SPRAY : SR_POLICY_TYPE_DEFAULT), weight); + vec_free (segments); } else if (is_del) rv = sr_mpls_policy_del (bsid); @@ -516,6 +517,7 @@ sr_mpls_policy_command_fn (vlib_main_t * vm, unformat_input_t * input, if (operation == 3 && weight == (u32) ~ 0) return clib_error_return (0, "No new weight for the SL specified"); rv = sr_mpls_policy_mod (bsid, operation, segments, sl_index, weight); + vec_free (segments); } switch (rv) { |