Browse Source

file: exec: properly free memory on error

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
[fix whitespace]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 90e40bd3d5b6d164be4c1f3583a13dc2f34d6563)
Yousong Zhou 4 years ago
parent
commit
7be1f17138
1 changed files with 18 additions and 3 deletions
  1. 18 3
      file.c

+ 18 - 3
file.c

@@ -626,13 +626,16 @@ rpc_file_exec_run(const char *cmd,
 	if (!c)
 		return UBUS_STATUS_UNKNOWN_ERROR;
 
-	if (pipe(opipe) || pipe(epipe))
-		return rpc_errno_status();
+	if (pipe(opipe))
+		goto fail_opipe;
+
+	if (pipe(epipe))
+		goto fail_epipe;
 
 	switch ((pid = fork()))
 	{
 	case -1:
-		return rpc_errno_status();
+		goto fail_fork;
 
 	case 0:
 		uloop_done();
@@ -724,6 +727,18 @@ rpc_file_exec_run(const char *cmd,
 	}
 
 	return UBUS_STATUS_OK;
+
+fail_fork:
+	close(epipe[0]);
+	close(epipe[1]);
+
+fail_epipe:
+	close(opipe[0]);
+	close(opipe[1]);
+
+fail_opipe:
+	free(c);
+	return rpc_errno_status();
 }
 
 static int