From: Mathieu Desnoyers Date: Tue, 27 Aug 2013 20:24:55 +0000 (-0400) Subject: Fix: run_as gid/uid test should return result to parent X-Git-Tag: v2.2.4~7 X-Git-Url: http://git.liburcu.org/?p=lttng-tools.git;a=commitdiff_plain;h=27c3d93497da2a109e6e42e9ef8c78e42caa127e Fix: run_as gid/uid test should return result to parent Failure to do so could cause the parent to hang on read() waiting for the return value from the child. Targets: 2.3-rc and stable-2.2 branches. Signed-off-by: Mathieu Desnoyers Signed-off-by: David Goulet --- diff --git a/src/common/runas.c b/src/common/runas.c index bd51cd4ed..6979ad325 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -130,14 +130,16 @@ int child_run_as(void *_data) ret = setegid(data->gid); if (ret < 0) { PERROR("setegid"); - return EXIT_FAILURE; + sendret.i = -1; + goto write_return; } } if (data->uid != geteuid()) { ret = seteuid(data->uid); if (ret < 0) { PERROR("seteuid"); - return EXIT_FAILURE; + sendret.i = -1; + goto write_return; } } /* @@ -145,6 +147,8 @@ int child_run_as(void *_data) */ umask(0); sendret.i = (*data->cmd)(data->data); + +write_return: /* send back return value */ writeleft = sizeof(sendret); index = 0;