diff mbox series

[OpenWrt-Devel,rpcd,2/4] exec: properly free memory on rpc_exec() error

Message ID 20191020112608.129703-2-yszhou4tech@gmail.com
State Superseded
Headers show
Series [OpenWrt-Devel,rpcd,1/4] plugin: exec: properly free memory on parse error | expand

Commit Message

Yousong Zhou Oct. 20, 2019, 11:26 a.m. UTC
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
---
 exec.c   | 7 ++++++-
 plugin.c | 4 +++-
 2 files changed, 9 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/exec.c b/exec.c
index eb52966..f490ad7 100644
--- a/exec.c
+++ b/exec.c
@@ -313,7 +313,7 @@  rpc_exec(const char **args, rpc_exec_write_cb_t in,
 	switch ((pid = fork()))
 	{
 	case -1:
-		return rpc_errno_status();
+		goto fail_fork;
 
 	case 0:
 		uloop_done();
@@ -372,6 +372,10 @@  rpc_exec(const char **args, rpc_exec_write_cb_t in,
 
 	return UBUS_STATUS_OK;
 
+fail_fork:
+	close(epipe[0]);
+	close(epipe[1]);
+
 fail_epipe:
 	close(opipe[0]);
 	close(opipe[1]);
@@ -381,5 +385,6 @@  fail_opipe:
 	close(ipipe[1]);
 
 fail_ipipe:
+	free(c);
 	return rpc_errno_status();
 }
diff --git a/plugin.c b/plugin.c
index d3526aa..ac8de6d 100644
--- a/plugin.c
+++ b/plugin.c
@@ -161,9 +161,11 @@  rpc_plugin_call(struct ubus_context *ctx, struct ubus_object *obj,
 	c->argv[1] = "call";
 	c->argv[2] = c->method;
 
-	return rpc_exec(c->argv, rpc_plugin_call_stdin_cb,
+	rv = rpc_exec(c->argv, rpc_plugin_call_stdin_cb,
 	                rpc_plugin_call_stdout_cb, rpc_plugin_call_stderr_cb,
 	                rpc_plugin_call_finish_cb, c, ctx, req);
+	if (rv == UBUS_STATUS_OK)
+		return rv;
 
 fail:
 	if (c)