When there is no preferred device, failsafe will always
try to scan for preferred device. And if there is no device
found with the exec option, popen() will get an empty output.
In this case, it was forgotten to close the file descriptor.
It is fixed by closing the file descriptor even if the output is empty.
Coverity issue: 158633
Fixes:
a0194d828100 ("net/failsafe: add flexible device definition")
Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
char output[DEVARGS_MAXLEN + 1];
size_t len;
int old_err;
char output[DEVARGS_MAXLEN + 1];
size_t len;
int old_err;
RTE_ASSERT(cmdline != NULL || sdev->cmdline != NULL);
if (sdev->cmdline == NULL) {
RTE_ASSERT(cmdline != NULL || sdev->cmdline != NULL);
if (sdev->cmdline == NULL) {
/* We only read one line */
if (fgets(output, sizeof(output) - 1, fp) == NULL) {
DEBUG("Could not read command output");
/* We only read one line */
if (fgets(output, sizeof(output) - 1, fp) == NULL) {
DEBUG("Could not read command output");
+ ret = -ENODEV;
+ goto ret_pclose;
}
fs_sanitize_cmdline(output);
ret = fs_parse_device(sdev, output);
}
fs_sanitize_cmdline(output);
ret = fs_parse_device(sdev, output);
goto ret_pclose;
}
ret_pclose:
goto ret_pclose;
}
ret_pclose:
- ret = pclose(fp);
- if (ret) {
- ret = errno;
+ pclose_ret = pclose(fp);
+ if (pclose_ret) {
+ pclose_ret = errno;
ERROR("pclose: %s", strerror(errno));
errno = old_err;
ERROR("pclose: %s", strerror(errno));
errno = old_err;