Re: [PATCH] execveat.2: Fix prototype

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/6/21 10:54 AM, Michael Kerrisk (man-pages) wrote:
> Hi Alex,
> 
> Can we please begin every commit message with some English sentences :-).

Sure! Thanks for the reminder! :-)

> 
> I'm a little hesitant about the proposed change. execve() has a
> similar prototype in the kernel, but the glibc wrapper is just:
> 
> extern int execve (const char *__path, char *const __argv[],
>                    char *const __envp[]) ;

I guess that was the reason to write it like that.

> 
> I expect that one day when execveat() is added to glibc, it will be
> the same. What do you think?

execveat() was added 6 years ago to the kernel (kernel commit
51f39a1f0cea1cacf8c787f652f26dfee9611874) and there's still no wrapper.
 It's not like epoll_pwait2() that isn't yet in a stable release.  I'd
document the actual prototype, maybe open a bug in glibc to request a
wrapper, and if some day glibc adds that wrapper, I'd just revert the
commit.  Wouldn't you?

Thanks,

Alex

> 
> Thanks,
> 
> Michael
> 
> On Wed, 3 Feb 2021 at 19:46, Alejandro Colomar <alx.manpages@xxxxxxxxx> wrote:
>>
>> .../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/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 '\.h$' \
>>         |sort -V \
>>         |xargs pcregrep -Mn "(?s)^asmlinkage \w+ \**sys_${1}\(.*?\)" \
>>         |sed -E 's/^[^:]+:[0-9]+:/&\n/';
>> }
>>
>> 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
>> --
>> 2.30.0
>>
> 
> 


-- 
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/



[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux