net/failsafe: fix errno set on command execution
This is unacceptable behavior. Fixes: a0194d828100 ("net/failsafe: add flexible device definition") Fixes: 35ffe4208140 ("net/failsafe: fix missing pclose after popen") Cc: stable@dpdk.org Reported-by: Matan Azrad <matan@mellanox.com> Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
This commit is contained in:
parent
7df6f8542d
commit
4853f2be3c
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user