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>
This commit is contained in:
Yousong Zhou 2019-10-21 12:59:23 +00:00 committed by Jo-Philipp Wich
parent 9ecfada16d
commit 90e40bd3d5

21
file.c
View file

@ -823,13 +823,16 @@ rpc_file_exec_run(const char *cmd, const struct blob_attr *sid,
if (!c) if (!c)
return UBUS_STATUS_UNKNOWN_ERROR; return UBUS_STATUS_UNKNOWN_ERROR;
if (pipe(opipe) || pipe(epipe)) if (pipe(opipe))
return rpc_errno_status(); goto fail_opipe;
if (pipe(epipe))
goto fail_epipe;
switch ((pid = fork())) switch ((pid = fork()))
{ {
case -1: case -1:
return rpc_errno_status(); goto fail_fork;
case 0: case 0:
uloop_done(); uloop_done();
@ -921,6 +924,18 @@ rpc_file_exec_run(const char *cmd, const struct blob_attr *sid,
} }
return UBUS_STATUS_OK; 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 static int