From: Mathieu Desnoyers Date: Thu, 23 Feb 2012 15:09:09 +0000 (-0500) Subject: Fix: run_as error handling X-Git-Tag: v2.0.0-rc3~35 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=def5e0e8ef5df8ccf3003b5afbd57561cf262a25;p=lttng-tools.git Fix: run_as error handling Signed-off-by: Mathieu Desnoyers --- diff --git a/src/common/runas.c b/src/common/runas.c index 86db9b868..cdc9cb79e 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -217,6 +217,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) ret = pipe(retval_pipe); if (ret < 0) { perror("pipe"); + retval.i = ret; goto end; } run_as_data.data = data; @@ -230,7 +231,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) -1, 0); if (child_stack == MAP_FAILED) { perror("mmap"); - ret = -ENOMEM; + retval.i = -ENOMEM; goto close_pipe; } /* @@ -241,7 +242,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) &run_as_data); if (pid < 0) { perror("clone"); - ret = pid; + retval.i = pid; goto unmap_stack; } /* receive return value */ @@ -265,12 +266,13 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) pid = waitpid(pid, &status, 0); if (pid < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) { perror("wait"); - ret = -1; + retval.i = -1; } unmap_stack: ret = munmap(child_stack, RUNAS_CHILD_STACK_SIZE); if (ret < 0) { perror("munmap"); + retval.i = ret; } close_pipe: close(retval_pipe[0]);