From: Yousong Zhou Date: Mon, 21 Oct 2019 12:59:23 +0000 (+0000) Subject: file: exec: properly free memory on error X-Git-Url: https://git.librecmc.org/?p=oweals%2Frpcd.git;a=commitdiff_plain;h=90e40bd3d5b6d164be4c1f3583a13dc2f34d6563 file: exec: properly free memory on error Signed-off-by: Yousong Zhou [fix whitespace] Signed-off-by: Jo-Philipp Wich --- diff --git a/file.c b/file.c index b1adcb7..4ed2e5c 100644 --- a/file.c +++ b/file.c @@ -823,13 +823,16 @@ 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 +924,18 @@ 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