Memory allocated for 'hkey' is not freed when
get_stringset(..., ETH_SS_RSS_HASH_FUNCS...) fails.

Fixes: b888f35 ("ethtool: Support for configurable RSS hash function")
Cc: Gal Pressman <g...@mellanox.com>
Signed-off-by: Ivan Vecera <c...@cera.cz>
---
 ethtool.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/ethtool.c b/ethtool.c
index 2b90984..fb93ae8 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -3910,7 +3910,7 @@ static int do_srxfhindir(struct cmd_context *ctx, int 
rxfhindir_default,
 static int do_srxfh(struct cmd_context *ctx)
 {
        struct ethtool_rxfh rss_head = {0};
-       struct ethtool_rxfh *rss;
+       struct ethtool_rxfh *rss = NULL;
        struct ethtool_rxnfc ring_count;
        int rxfhindir_equal = 0, rxfhindir_default = 0;
        struct ethtool_gstrings *hfuncs = NULL;
@@ -4064,7 +4064,8 @@ static int do_srxfh(struct cmd_context *ctx)
                hfuncs = get_stringset(ctx, ETH_SS_RSS_HASH_FUNCS, 0, 1);
                if (!hfuncs) {
                        perror("Cannot get hash functions names");
-                       return 1;
+                       err = 1;
+                       goto free;
                }
 
                for (i = 0; i < hfuncs->len && !req_hfunc ; i++) {
@@ -4078,8 +4079,8 @@ static int do_srxfh(struct cmd_context *ctx)
                if (!req_hfunc) {
                        fprintf(stderr,
                                "Unknown hash function: %s\n", req_hfunc_name);
-                       free(hfuncs);
-                       return 1;
+                       err = 1;
+                       goto free;
                }
        }
 
@@ -4120,9 +4121,7 @@ static int do_srxfh(struct cmd_context *ctx)
        }
 
 free:
-       if (hkey)
-               free(hkey);
-
+       free(hkey);
        free(rss);
        free(hfuncs);
        return err;
-- 
2.16.4

Reply via email to