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 <[email protected]>
---
diff --git a/src/common/runas.c b/src/common/runas.c
index bd51cd4..6979ad3 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;

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to