diff mbox series

[OpenWrt-Devel,rpcd,v2,5/6] file: exec: properly free memory on error

Message ID 20191021125924.37223-1-yszhou4tech@gmail.com
State Accepted
Headers show
Series memory issue fixes | expand

Commit Message

Yousong Zhou Oct. 21, 2019, 12:59 p.m. UTC
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
---
 file.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/file.c b/file.c
index b1adcb7..47fcd9a 100644
--- a/file.c
+++ b/file.c
@@ -823,13 +823,15 @@  rpc_file_exec_run(const char *cmd, const struct blob_attr *sid,
 	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();
@@ -921,6 +923,16 @@  rpc_file_exec_run(const char *cmd, const struct blob_attr *sid,
 	}
 
 	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