X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Frunas.c;h=3a89cc9ab8d1f73795ca2d9f963fd34423911cbb;hb=6364a07adde1072d595044a19359e61fc27940dd;hp=e230774df442134ddbf45185a080806c4974f85f;hpb=d14d33bf091e72b23b1f90ea18a0a01bed098b76;p=lttng-tools.git diff --git a/src/common/runas.c b/src/common/runas.c index e230774df..3a89cc9ab 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -38,6 +38,10 @@ #define RUNAS_CHILD_STACK_SIZE 10485760 +#ifndef MAP_STACK +#define MAP_STACK 0 +#endif + #ifdef __FreeBSD__ /* FreeBSD MAP_STACK always return -ENOMEM */ #define LTTNG_MAP_STACK 0 @@ -149,13 +153,14 @@ int _open(void *_data) static int child_run_as(void *_data) { + int ret; struct run_as_data *data = _data; - size_t writelen, writeleft, index; + ssize_t writelen; + size_t writeleft, index; union { int i; char c[sizeof(int)]; } sendret; - int ret; /* * Child: it is safe to drop egid and euid while sharing the @@ -313,8 +318,13 @@ static int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) { if (!getenv("LTTNG_DEBUG_NOCLONE")) { + int ret; + DBG("Using run_as_clone"); - return run_as_clone(cmd, data, uid, gid); + pthread_mutex_lock(<tng_libc_state_lock); + ret = run_as_clone(cmd, data, uid, gid); + pthread_mutex_unlock(<tng_libc_state_lock); + return ret; } else { DBG("Using run_as_noclone"); return run_as_noclone(cmd, data, uid, gid);