From: Raslan Darawsheh Date: Thu, 3 Aug 2017 13:09:58 +0000 (+0300) Subject: net/failsafe: fix missing pclose after popen X-Git-Tag: spdx-start~2248 X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=35ffe42081408ffbcd42709c9bde16861b04644b net/failsafe: fix missing pclose after popen 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 Acked-by: Gaetan Rivet --- diff --git a/drivers/net/failsafe/failsafe_args.c b/drivers/net/failsafe/failsafe_args.c index 932e371f94..3f92a779f4 100644 --- a/drivers/net/failsafe/failsafe_args.c +++ b/drivers/net/failsafe/failsafe_args.c @@ -115,7 +115,7 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) char output[DEVARGS_MAXLEN + 1]; size_t len; int old_err; - int ret; + int ret, pclose_ret; RTE_ASSERT(cmdline != NULL || sdev->cmdline != NULL); if (sdev->cmdline == NULL) { @@ -145,7 +145,8 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) /* We only read one line */ if (fgets(output, sizeof(output) - 1, fp) == NULL) { DEBUG("Could not read command output"); - return -ENODEV; + ret = -ENODEV; + goto ret_pclose; } fs_sanitize_cmdline(output); ret = fs_parse_device(sdev, output); @@ -154,12 +155,12 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) 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; - return ret; + return pclose_ret; } return ret; }