From e1055edba0a6560e688827da9f0cf3b4b96789e0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Sat, 17 Oct 2015 19:34:03 -0400 Subject: [PATCH] Port: Implement prctl wrapper MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- src/common/compat/Makefile.am | 2 +- src/common/compat/prctl.h | 46 +++++++++++++++++++++++++++++++++++ src/common/runas.c | 8 +++--- 3 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 src/common/compat/prctl.h 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; -- 2.34.1