Coverity issue: 1363119 Fixes: e1ee596326ae ("Add support for querying and setting private flags")
Signed-off-by: John W. Linville <linvi...@tuxdriver.com> --- ethtool.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ethtool.c b/ethtool.c index aa3ef5ed2f75..0885a61097ad 100644 --- a/ethtool.c +++ b/ethtool.c @@ -4205,7 +4205,7 @@ static int do_gprivflags(struct cmd_context *ctx) struct ethtool_gstrings *strings; struct ethtool_value flags; unsigned int i; - int max_len = 0, cur_len; + int max_len = 0, cur_len, rc; if (ctx->argc != 0) exit_bad_args(); @@ -4215,11 +4215,13 @@ static int do_gprivflags(struct cmd_context *ctx) 1); if (!strings) { perror("Cannot get private flag names"); - return 1; + rc = 1; + goto err; } if (strings->len == 0) { fprintf(stderr, "No private flags defined\n"); - return 1; + rc = 1; + goto err; } if (strings->len > 32) { /* ETHTOOL_GPFLAGS can only cover 32 flags */ @@ -4230,7 +4232,8 @@ static int do_gprivflags(struct cmd_context *ctx) flags.cmd = ETHTOOL_GPFLAGS; if (send_ioctl(ctx, &flags)) { perror("Cannot get private flags"); - return 1; + rc = 1; + goto err; } /* Find longest string and align all strings accordingly */ @@ -4248,7 +4251,12 @@ static int do_gprivflags(struct cmd_context *ctx) (const char *)strings->data + i * ETH_GSTRING_LEN, (flags.data & (1U << i)) ? "on" : "off"); - return 0; + rc = 0; + +err: + if (strings) + free(strings); + return rc; } static int do_sprivflags(struct cmd_context *ctx) -- 2.7.4