summaryrefslogtreecommitdiff
path: root/exec.c
diff options
context:
space:
mode:
authorYousong Zhou <yszhou4tech@gmail.com>2019-10-21 06:10:27 +0000
committerJo-Philipp Wich <jo@mein.io>2019-10-29 09:23:22 +0100
commit02c6e1d08c9abfebae050ebeab5766935e849dc2 (patch)
treea9ea6f102c13389cf3c66c415a875da80e980f8a /exec.c
parentcc502635046a2015d07fab5a21edbda7b7b98f38 (diff)
downloadrpcd-02c6e1d08c9abfebae050ebeab5766935e849dc2.tar.gz
exec: properly free memory on rpc_exec() error
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com> [fix whitespace] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c7
1 files changed, 6 insertions, 1 deletions
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();
}