From: Jérémie Galarneau Date: Sat, 17 Oct 2015 23:34:03 +0000 (-0400) Subject: Port: Implement prctl wrapper X-Git-Tag: v2.8.0-rc1~272 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=e1055edba0a6560e688827da9f0cf3b4b96789e0;p=lttng-tools.git Port: Implement prctl wrapper Signed-off-by: Jérémie Galarneau --- diff --git a/src/common/compat/Makefile.am b/src/common/compat/Makefile.am index 9b1211701..e12422585 100644 --- a/src/common/compat/Makefile.am +++ b/src/common/compat/Makefile.am @@ -10,4 +10,4 @@ endif libcompat_la_SOURCES = poll.h fcntl.h endian.h mman.h \ socket.h compat-fcntl.c uuid.h tid.h \ - getenv.h string.h $(COMPAT) + getenv.h string.h prctl.h $(COMPAT) diff --git a/src/common/compat/prctl.h b/src/common/compat/prctl.h new file mode 100644 index 000000000..39e7ec7a1 --- /dev/null +++ b/src/common/compat/prctl.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2015 - Jérémie Galarneau + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _COMPAT_PRCTL_H +#define _COMPAT_PRCTL_H + +#ifdef __linux__ +#include + +static inline +int lttng_prctl(int option, unsigned long arg2, unsigned long arg3, + unsigned long arg4, unsigned long arg5) +{ + return prctl(option, arg2, arg3, arg4, arg5); +} + +#else + +#ifndef PR_SET_NAME +#define PR_SET_NAME 0 +#endif /* PR_SET_NAME */ + +static inline +int lttng_prctl(int option, unsigned long arg2, unsigned long arg3, + unsigned long arg4, unsigned long arg5) +{ + return -ENOSYS; +} + +#endif /* __linux__ */ + +#endif /* _COMPAT_PRCTL_H */ diff --git a/src/common/runas.c b/src/common/runas.c index bc7356b6a..7e5743be1 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -31,11 +31,12 @@ #include #include #include -#include +#include #include #include #include +#include #include #include "runas.h" @@ -323,8 +324,9 @@ int run_as_worker(struct run_as_worker *worker) memset(worker->procname, 0, proc_orig_len); strncpy(worker->procname, DEFAULT_RUN_AS_WORKER_NAME, proc_orig_len); - ret = prctl(PR_SET_NAME, DEFAULT_RUN_AS_WORKER_NAME, 0, 0, 0); - if (ret) { + ret = lttng_prctl(PR_SET_NAME, + (unsigned long) DEFAULT_RUN_AS_WORKER_NAME, 0, 0, 0); + if (ret && ret != -ENOSYS) { /* Don't fail as this is not essential. */ PERROR("prctl PR_SET_NAME"); ret = 0;