[PATCH 4/4] devicetree: dt_base: fix resource leak on error exit paths

Colin King colin.king at canonical.com
Tue May 31 10:42:38 UTC 2016


From: Colin Ian King <colin.king at canonical.com>

There are a couple of resource leaks on the error exit paths, free
the variable output and re-work the exit paths to have a common
resource free and return point.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/devicetree/dt_base/dt_base.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/devicetree/dt_base/dt_base.c b/src/devicetree/dt_base/dt_base.c
index c325045..efb05fc 100644
--- a/src/devicetree/dt_base/dt_base.c
+++ b/src/devicetree/dt_base/dt_base.c
@@ -57,10 +57,10 @@ static int dt_base_check_valid(fwts_framework *fw)
 
 static int dt_base_check_warnings(fwts_framework *fw)
 {
-	int rc, status, in_fd, out_fd;
+	int rc, status, in_fd, out_fd, ret = FWTS_ERROR;
 	ssize_t in_len, out_len;
 	const char *command;
-	char *output;
+	char *output = NULL;
 	pid_t pid;
 
 	if (!fw->fdt)
@@ -88,18 +88,23 @@ static int dt_base_check_warnings(fwts_framework *fw)
 		fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceTreeBaseDTCFailed",
 				"dtc reports fatal device tree errors:\n%s\n",
 				output);
-		return FWTS_ERROR;
+		goto err;
 	}
 
 	if (out_len > 0) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "DeviceTreeBaseDTCWarnings",
 				"dtc reports warnings from device tree:\n%s\n",
 				output);
-		return FWTS_ERROR;
+		goto err;
 	}
 
 	fwts_passed(fw, "No warnings from dtc");
-	return FWTS_OK;
+
+	ret = FWTS_OK;
+
+err:
+	free(output);
+	return ret;
 }
 
 static fwts_framework_minor_test dt_base_tests[] = {
-- 
2.8.1




More information about the fwts-devel mailing list