This is unacceptable behavior. Fixes: a0194d828100 ("net/failsafe: add flexible device definition") Fixes: 35ffe4208140 ("net/failsafe: fix missing pclose after popen") Cc: sta...@dpdk.org
Reported-by: Matan Azrad <ma...@mellanox.com> Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com> --- drivers/net/failsafe/failsafe_args.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/net/failsafe/failsafe_args.c b/drivers/net/failsafe/failsafe_args.c index 1f22416..cc29c5e 100644 --- a/drivers/net/failsafe/failsafe_args.c +++ b/drivers/net/failsafe/failsafe_args.c @@ -115,8 +115,7 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) /* store possible newline as well */ char output[DEVARGS_MAXLEN + 1]; size_t len; - int old_err; - int ret, pclose_ret; + int ret; RTE_ASSERT(cmdline != NULL || sdev->cmdline != NULL); if (sdev->cmdline == NULL) { @@ -135,12 +134,10 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) sdev->cmdline[i] = ' '; } DEBUG("'%s'", sdev->cmdline); - old_err = errno; fp = popen(sdev->cmdline, "r"); if (fp == NULL) { - ret = errno; + ret = -errno; ERROR("popen: %s", strerror(errno)); - errno = old_err; return ret; } /* We only read one line */ @@ -155,18 +152,11 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) goto ret_pclose; } ret = fs_parse_device(sdev, output); - if (ret) { + if (ret) ERROR("Parsing device '%s' failed", output); - goto ret_pclose; - } ret_pclose: - pclose_ret = pclose(fp); - if (pclose_ret) { - pclose_ret = errno; + if (pclose(fp) == -1) ERROR("pclose: %s", strerror(errno)); - errno = old_err; - return pclose_ret; - } return ret; } -- 2.1.4