Fix a rare case in rte_flow initialization where the action hash table
is not freed if allocating a NIC match table fails.
Fixes: ea7768b5bba8 ("net/enic: add flow implementation based on Flow Manager 
API")
Cc: sta...@dpdk.org

Signed-off-by: John Daley <johnd...@cisco.com>
Reviewed-by: Hyong Youb Kim <hyon...@cisco.com>
---
 drivers/net/enic/enic_fm_flow.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/enic/enic_fm_flow.c b/drivers/net/enic/enic_fm_flow.c
index 21d9b1cef7..cd364ee16b 100644
--- a/drivers/net/enic/enic_fm_flow.c
+++ b/drivers/net/enic/enic_fm_flow.c
@@ -2890,7 +2890,7 @@ enic_fm_init(struct enic *enic)
        rc = enic_fm_init_actions(fm);
        if (rc) {
                ENICPMD_LOG(ERR, "cannot create action hash, error:%d", rc);
-               goto error_tables;
+               goto error_counters;
        }
        /*
         * One default exact match table for each direction. We hold onto
@@ -2899,7 +2899,7 @@ enic_fm_init(struct enic *enic)
        rc = enic_fet_alloc(fm, 1, NULL, 128, &fm->default_ig_fet);
        if (rc) {
                ENICPMD_LOG(ERR, "cannot alloc default IG exact match table");
-               goto error_counters;
+               goto error_actions;
        }
        fm->default_ig_fet->ref = 1;
        rc = enic_fet_alloc(fm, 0, NULL, 128, &fm->default_eg_fet);
@@ -2914,6 +2914,8 @@ enic_fm_init(struct enic *enic)
 
 error_ig_fet:
        enic_fet_free(fm, fm->default_ig_fet);
+error_actions:
+       rte_hash_free(fm->action_hash);
 error_counters:
        enic_fm_free_all_counters(fm);
 error_tables:
-- 
2.26.2

Reply via email to