From 78b5b29e6cf286ce687e7b4d42745fb06cfb2353 Mon Sep 17 00:00:00 2001 From: Ivan Vecera Date: Fri, 25 Sep 2020 08:39:16 +0200 Subject: [PATCH 18/19] fix memory leaks in do_sfeatures() Memory blocks referenced by new_state and old_state are never freed. For efeatures there is no need to check pointer as free() can be called with NULL parameter. Fixes: 6042804cf6ec ("Change -k/-K options to use ETHTOOL_{G,S}FEATURES") Cc: Michal Kubecek Signed-off-by: Ivan Vecera --- ethtool.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ethtool.c b/ethtool.c index 2e24e98187d2..32ef80add923 100644 --- a/ethtool.c +++ b/ethtool.c @@ -2392,9 +2392,10 @@ static int do_sfeatures(struct cmd_context *ctx) int any_changed = 0, any_mismatch = 0; u32 off_flags_wanted = 0; u32 off_flags_mask = 0; - struct ethtool_sfeatures *efeatures; + struct ethtool_sfeatures *efeatures = NULL; + struct feature_state *old_state = NULL; + struct feature_state *new_state = NULL; struct cmdline_info *cmdline_features; - struct feature_state *old_state, *new_state; struct ethtool_value eval; unsigned int i, j; int err, rc; @@ -2418,8 +2419,6 @@ static int do_sfeatures(struct cmd_context *ctx) memset(efeatures->features, 0, FEATURE_BITS_TO_BLOCKS(defs->n_features) * sizeof(efeatures->features[0])); - } else { - efeatures = NULL; } /* Generate cmdline_info for legacy flags and kernel-named @@ -2578,9 +2577,11 @@ static int do_sfeatures(struct cmd_context *ctx) rc = 0; err: + free(new_state); + free(old_state); free(defs); - if (efeatures) - free(efeatures); + free(efeatures); + return rc; } -- 2.26.2