[dpdk-dev] [PATCH] net/failsafe: fix for missing pclose after popen

rasland at mellanox.com rasland at mellanox.com
Thu Aug 3 15:09:58 CEST 2017


From: Raslan Darawsheh <rasland at mellanox.com>

When there is no prefered device, failsafe will always
try to scan for prefered 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.o
it is fixed by closing the file descriptor even if the output is emtpy.

Fixes: a0194d82 ("net/failsafe: add flexible device definition")

Signed-off-by: Raslan Darawsheh <rasland at mellanox.com>
---
 drivers/net/failsafe/failsafe_args.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/net/failsafe/failsafe_args.c b/drivers/net/failsafe/failsafe_args.c
index 932e371..3f92a77 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;
 }
-- 
2.7.4



More information about the dev mailing list