Hi Alex, On 2/7/21 12:43 PM, Alejandro Colomar wrote: > It's been 6 years since execveat(2) was added to the kernel, > and there's still no glibc wrapper. Let's document the kernel > syscall prototype. > > I reported a bug against glibc requesting a wrapper; > when glibc adds the wrapper, this commit should probably be > reverted. Thanks for filing the glibc bug. I've applied this patch. Thanks! Cheers, Michael > ...... > > .../linux$ grep_syscall execveat > fs/exec.c:2062: > SYSCALL_DEFINE5(execveat, > int, fd, const char __user *, filename, > const char __user *const __user *, argv, > const char __user *const __user *, envp, > int, flags) > fs/exec.c:2083: > COMPAT_SYSCALL_DEFINE5(execveat, int, fd, > const char __user *, filename, > const compat_uptr_t __user *, argv, > const compat_uptr_t __user *, envp, > int, flags) > include/linux/compat.h:815: > asmlinkage long compat_sys_execveat(int dfd, const char __user *filename, > const compat_uptr_t __user *argv, > const compat_uptr_t __user *envp, int flags); > include/linux/syscalls.h:980: > asmlinkage long sys_execveat(int dfd, const char __user *filename, > const char __user *const __user *argv, > const char __user *const __user *envp, int flags); > .../linux$ > > function grep_syscall() > { > if ! [ -v 1 ]; then > >&2 echo "Usage: ${FUNCNAME[0]} <syscall>"; > return ${EX_USAGE}; > fi > > find * -type f \ > |grep '\.c$' \ > |sort -V \ > |xargs pcregrep -Mn "(?s)^\w*SYSCALL_DEFINE.\(${1},.*?\)" \ > |sed -E 's/^[^:]+:[0-9]+:/&\n/'; > > find * -type f \ > |grep '\.[ch]$' \ > |sort -V \ > |xargs pcregrep -Mn "(?s)^asmlinkage\s+[\w\s]+\**sys_${1}\s*\(.*?\)" \ > |sed -E 's/^[^:]+:[0-9]+:/&\n/'; > } > > Glibc bug: <https://sourceware.org/bugzilla/show_bug.cgi?id=27364> > Signed-off-by: Alejandro Colomar <alx.manpages@xxxxxxxxx> > --- > man2/execveat.2 | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/man2/execveat.2 b/man2/execveat.2 > index 02d9c7331..d1ce4bee1 100644 > --- a/man2/execveat.2 > +++ b/man2/execveat.2 > @@ -31,7 +31,7 @@ execveat \- execute program relative to a directory file descriptor > .B #include <unistd.h> > .PP > .BI "int execveat(int " dirfd ", const char *" pathname , > -.BI " char *const " argv "[], char *const " envp [], > +.BI " const char *const " argv "[], const char *const " envp [], > .BI " int " flags ); > .fi > .PP > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/