On Fri, Sep 30, 2016 at 03:56:16PM -0400, John W. Linville wrote:
> Coverity issue: 1363119
> Fixes: e1ee596326ae ("Add support for querying and setting private flags")
>
> Signed-off-by: John W. Linville <[email protected]>
> ---
> 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;
This goto looks redundant, since all you're doing at err is re-checking if
strings is non-null to free it.
> 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
>
--
Jarod Wilson
[email protected]