diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-04-30 10:42:43 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-04-30 10:42:43 -0700 |
commit | ff026950e280bc3e9487b41b460fb31bc5b57721 (patch) | |
tree | 007d0b1ae8fb47ffc62972820c762f1810612899 /sysdeps/unix/sysv/linux/prctl.c | |
parent | 051be01f6b41a1466b07ae4bd7f5894a8ec5fe67 (diff) | |
download | glibc-ff026950e280bc3e9487b41b460fb31bc5b57721.tar glibc-ff026950e280bc3e9487b41b460fb31bc5b57721.tar.gz glibc-ff026950e280bc3e9487b41b460fb31bc5b57721.tar.bz2 glibc-ff026950e280bc3e9487b41b460fb31bc5b57721.zip |
Add a C wrapper for prctl [BZ #25896]
Add a C wrapper to pass arguments in
/* Control process execution. */
extern int prctl (int __option, ...) __THROW;
to prctl syscall:
extern int prctl (int, unsigned long int, unsigned long int,
unsigned long int, unsigned long int);
Diffstat (limited to 'sysdeps/unix/sysv/linux/prctl.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/prctl.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/prctl.c b/sysdeps/unix/sysv/linux/prctl.c new file mode 100644 index 0000000000..d5725f14cf --- /dev/null +++ b/sysdeps/unix/sysv/linux/prctl.c @@ -0,0 +1,42 @@ +/* prctl - Linux specific syscall. + Copyright (C) 2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <sysdep.h> +#include <stdarg.h> +#include <sys/prctl.h> + +/* Unconditionally read all potential arguments. This may pass + garbage values to the kernel, but avoids the need for teaching + glibc the argument counts of individual options (including ones + that are added to the kernel in the future). */ + +int +__prctl (int option, ...) +{ + va_list arg; + va_start (arg, option); + unsigned long int arg2 = va_arg (arg, unsigned long int); + unsigned long int arg3 = va_arg (arg, unsigned long int); + unsigned long int arg4 = va_arg (arg, unsigned long int); + unsigned long int arg5 = va_arg (arg, unsigned long int); + va_end (arg); + return INLINE_SYSCALL_CALL (prctl, option, arg2, arg3, arg4, arg5); +} + +libc_hidden_def (__prctl) +weak_alias (__prctl, prctl) |