Message ID | 20200429144727.3769136-2-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | [1/2] Mark unsigned long arguments with U in more syscalls [BZ #25810] | expand |
* H. J. Lu: > diff --git a/sysdeps/unix/sysv/linux/prctl.c b/sysdeps/unix/sysv/linux/prctl.c > new file mode 100644 > index 0000000000..e0e5ef4e47 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/prctl.c > @@ -0,0 +1,39 @@ > +/* 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 <unistd.h> > +#include <sysdep.h> > +#include <errno.h> > + > +extern int prctl (int, unsigned long, unsigned long, unsigned long, > + unsigned long); > +hidden_proto (prctl) > +extern int __prctl (int, unsigned long, unsigned long, unsigned long, > + unsigned long); > +hidden_proto (__prctl) > + > +int > +__prctl (int option, unsigned long arg2, unsigned long arg3, > + unsigned long arg4, unsigned long arg5) unsigned long int everywhere. > +{ > + return INLINE_SYSCALL_CALL (prctl, option, arg2, arg3, arg4, arg5); > +} > + > +hidden_def (__prctl) > +weak_alias (__prctl, prctl) > +hidden_weak (prctl) Can't you use libc_hidden_proto in include/sys/prctl.h and libc_hidden_proto here? > diff --git a/sysdeps/unix/sysv/linux/process_vm_readv.c b/sysdeps/unix/sysv/linux/process_vm_readv.c > new file mode 100644 > index 0000000000..1e711abe43 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/process_vm_readv.c > @@ -0,0 +1,32 @@ > +/* process_vm_readv - 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 <unistd.h> > +#include <sysdep.h> > +#include <errno.h> > +#include <sys/uio.h> > + > +ssize_t > +process_vm_readv (pid_t pid, const struct iovec *local_iov, > + unsigned long liovcnt, const struct iovec *remote_iov, > + unsigned long riovcnt, unsigned long flags) > +{ > + return INLINE_SYSCALL_CALL (process_vm_readv, pid, local_iov, > + liovcnt, remote_iov, riovcnt, flags); > +} Likewise, unsigned long int. > + > diff --git a/sysdeps/unix/sysv/linux/process_vm_writev.c b/sysdeps/unix/sysv/linux/process_vm_writev.c > new file mode 100644 > index 0000000000..e41058750b > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/process_vm_writev.c > @@ -0,0 +1,32 @@ > +/* process_vm_writev - 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 <unistd.h> > +#include <sysdep.h> > +#include <errno.h> > +#include <sys/uio.h> > + > +ssize_t > +process_vm_writev (pid_t pid, const struct iovec *local_iov, > + unsigned long liovcnt, const struct iovec *remote_iov, > + unsigned long riovcnt, unsigned long flags) > +{ > + return INLINE_SYSCALL_CALL (process_vm_writev, pid, local_iov, > + liovcnt, remote_iov, riovcnt, flags); > +} Likewise. (I trust the indentation is only wrong in the patch, it's okay when applied.) Thanks, Florian
* H. J. Lu: > Since the the U marker can only be applied to 2 unsigned long arguments, > add a C wrapper for prctl, process_vm_readv and process_vm_writev syscals > which have more than 2 unsigned long arguments. I forgot: Please mention syscalls.list somewhere in the commit message, so that it is clear that the U marker refers to that. Thanks, Florian
On Wed, Apr 29, 2020 at 7:58 AM Florian Weimer <fweimer@redhat.com> wrote: > > * H. J. Lu: > > > Since the the U marker can only be applied to 2 unsigned long arguments, > > add a C wrapper for prctl, process_vm_readv and process_vm_writev syscals > > which have more than 2 unsigned long arguments. > > I forgot: Please mention syscalls.list somewhere in the commit message, > so that it is clear that the U marker refers to that. > > Thanks, > Florian This is I am going to push: commit 86f4f2263bf21ff7f80905b3062c16213b016fe6 (HEAD -> master) Author: H.J. Lu <hjl.tools@gmail.com> Date: Wed Apr 29 08:08:40 2020 -0700 Mark unsigned long arguments with U in more syscalls [BZ #25810] Mark unsigned long arguments in mmap, read, recv, recvfrom, send, sendto, write, ioperm, sendfile64, setxattr, lsetxattr, fsetxattr, getxattr, lgetxattr, fgetxattr, listxattr, llistxattr and flistxattr with U in syscalls.list files.
* H. J. Lu: > On Wed, Apr 29, 2020 at 7:58 AM Florian Weimer <fweimer@redhat.com> wrote: >> >> * H. J. Lu: >> >> > Since the the U marker can only be applied to 2 unsigned long arguments, >> > add a C wrapper for prctl, process_vm_readv and process_vm_writev syscals >> > which have more than 2 unsigned long arguments. >> >> I forgot: Please mention syscalls.list somewhere in the commit message, >> so that it is clear that the U marker refers to that. >> >> Thanks, >> Florian > > This is I am going to push: > > commit 86f4f2263bf21ff7f80905b3062c16213b016fe6 (HEAD -> master) > Author: H.J. Lu <hjl.tools@gmail.com> > Date: Wed Apr 29 08:08:40 2020 -0700 > > Mark unsigned long arguments with U in more syscalls [BZ #25810] > > Mark unsigned long arguments in mmap, read, recv, recvfrom, send, sendto, > write, ioperm, sendfile64, setxattr, lsetxattr, fsetxattr, getxattr, > lgetxattr, fgetxattr, listxattr, llistxattr and flistxattr with U in > syscalls.list files. This is for the other commit. In that context, U is clear. It is less clear for the prctl/process_vm_readv/process_vm_writev commit. Thanks, Florian
On Wed, Apr 29, 2020 at 8:18 AM Florian Weimer <fweimer@redhat.com> wrote: > > * H. J. Lu: > > > On Wed, Apr 29, 2020 at 7:58 AM Florian Weimer <fweimer@redhat.com> wrote: > >> > >> * H. J. Lu: > >> > >> > Since the the U marker can only be applied to 2 unsigned long arguments, > >> > add a C wrapper for prctl, process_vm_readv and process_vm_writev syscals > >> > which have more than 2 unsigned long arguments. > >> > >> I forgot: Please mention syscalls.list somewhere in the commit message, > >> so that it is clear that the U marker refers to that. > >> > >> Thanks, > >> Florian > > > > This is I am going to push: > > > > commit 86f4f2263bf21ff7f80905b3062c16213b016fe6 (HEAD -> master) > > Author: H.J. Lu <hjl.tools@gmail.com> > > Date: Wed Apr 29 08:08:40 2020 -0700 > > > > Mark unsigned long arguments with U in more syscalls [BZ #25810] > > > > Mark unsigned long arguments in mmap, read, recv, recvfrom, send, sendto, > > write, ioperm, sendfile64, setxattr, lsetxattr, fsetxattr, getxattr, > > lgetxattr, fgetxattr, listxattr, llistxattr and flistxattr with U in > > syscalls.list files. > > This is for the other commit. In that context, U is clear. It is less > clear for the prctl/process_vm_readv/process_vm_writev commit. How about Since the the U marker can only be applied to 2 unsigned long arguments in syscalls.list files, add a C wrapper for prctl, process_vm_readv and process_vm_writev syscals which have more than 2 unsigned long arguments.
* H. J. Lu: > Since the the U marker can only be applied to 2 unsigned long arguments > in syscalls.list files, add a C wrapper for prctl, process_vm_readv and > process_vm_writev syscals which have more than 2 unsigned long > arguments. Yes, that's fine. Thanks. Florian
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 089a4899d5..1d9a8d3cdb 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -59,7 +59,8 @@ sysdep_routines += adjtimex clone umount umount2 readahead sysctl \ eventfd eventfd_read eventfd_write prlimit \ personality epoll_wait tee vmsplice splice \ open_by_handle_at mlock2 pkey_mprotect pkey_set pkey_get \ - timerfd_gettime timerfd_settime + timerfd_gettime timerfd_settime prctl \ + process_vm_readv process_vm_writev CFLAGS-gethostid.c = -fexceptions CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables diff --git a/sysdeps/unix/sysv/linux/prctl.c b/sysdeps/unix/sysv/linux/prctl.c new file mode 100644 index 0000000000..e0e5ef4e47 --- /dev/null +++ b/sysdeps/unix/sysv/linux/prctl.c @@ -0,0 +1,39 @@ +/* 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 <unistd.h> +#include <sysdep.h> +#include <errno.h> + +extern int prctl (int, unsigned long, unsigned long, unsigned long, + unsigned long); +hidden_proto (prctl) +extern int __prctl (int, unsigned long, unsigned long, unsigned long, + unsigned long); +hidden_proto (__prctl) + +int +__prctl (int option, unsigned long arg2, unsigned long arg3, + unsigned long arg4, unsigned long arg5) +{ + return INLINE_SYSCALL_CALL (prctl, option, arg2, arg3, arg4, arg5); +} + +hidden_def (__prctl) +weak_alias (__prctl, prctl) +hidden_weak (prctl) diff --git a/sysdeps/unix/sysv/linux/process_vm_readv.c b/sysdeps/unix/sysv/linux/process_vm_readv.c new file mode 100644 index 0000000000..1e711abe43 --- /dev/null +++ b/sysdeps/unix/sysv/linux/process_vm_readv.c @@ -0,0 +1,32 @@ +/* process_vm_readv - 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 <unistd.h> +#include <sysdep.h> +#include <errno.h> +#include <sys/uio.h> + +ssize_t +process_vm_readv (pid_t pid, const struct iovec *local_iov, + unsigned long liovcnt, const struct iovec *remote_iov, + unsigned long riovcnt, unsigned long flags) +{ + return INLINE_SYSCALL_CALL (process_vm_readv, pid, local_iov, + liovcnt, remote_iov, riovcnt, flags); +} + diff --git a/sysdeps/unix/sysv/linux/process_vm_writev.c b/sysdeps/unix/sysv/linux/process_vm_writev.c new file mode 100644 index 0000000000..e41058750b --- /dev/null +++ b/sysdeps/unix/sysv/linux/process_vm_writev.c @@ -0,0 +1,32 @@ +/* process_vm_writev - 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 <unistd.h> +#include <sysdep.h> +#include <errno.h> +#include <sys/uio.h> + +ssize_t +process_vm_writev (pid_t pid, const struct iovec *local_iov, + unsigned long liovcnt, const struct iovec *remote_iov, + unsigned long riovcnt, unsigned long flags) +{ + return INLINE_SYSCALL_CALL (process_vm_writev, pid, local_iov, + liovcnt, remote_iov, riovcnt, flags); +} + diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index 5b4e205934..1d8893d1b8 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -43,7 +43,6 @@ nfsservctl EXTRA nfsservctl i:ipp __compat_nfsservctl nfsservctl@GLIBC_2.0:GLIBC pipe - pipe i:f __pipe pipe pipe2 - pipe2 i:fi __pipe2 pipe2 pivot_root EXTRA pivot_root i:ss pivot_root -prctl EXTRA prctl i:iiiii __prctl prctl query_module EXTRA query_module i:sipip __compat_query_module query_module@GLIBC_2.0:GLIBC_2.23 quotactl EXTRA quotactl i:isip quotactl remap_file_pages - remap_file_pages i:pUiUi __remap_file_pages remap_file_pages @@ -98,8 +97,6 @@ name_to_handle_at EXTRA name_to_handle_at i:isppi name_to_handle_at setns EXTRA setns i:ii setns -process_vm_readv EXTRA process_vm_readv i:ipipii process_vm_readv -process_vm_writev EXTRA process_vm_writev i:ipipii process_vm_writev memfd_create EXTRA memfd_create i:si memfd_create pkey_alloc EXTRA pkey_alloc i:ii pkey_alloc pkey_free EXTRA pkey_free i:i pkey_free