[PATCH v2 04/14] powerpc/32: Remove powerpc select specialisation

Andrew Donnellan ajd at linux.ibm.com
Mon Aug 8 14:11:52 AEST 2022


On Mon, 2022-07-25 at 16:26 +1000, Rohan McLure wrote:
> Syscall #82 has been implemented for 32-bit platforms in a unique way
> on
> powerpc systems. This hack will in effect guess whether the caller is
> expecting new select semantics or old select semantics. It does so
> via a
> guess, based off the first parameter. In new select, this parameter
> represents the length of a user-memory array of file descriptors, and
> in
> old select this is a pointer to an arguments structure.
> 
> The heuristic simply interprets sufficiently large values of its
> first
> parameter as being a call to old select. The following is a
> discussion
> on how this syscall should be handled.
> 
> Link: 
> https://lore.kernel.org/lkml/13737de5-0eb7-e881-9af0-163b0d29a1a0@csgroup.eu/
> 
> As discussed in this thread, the existence of such a hack suggests
> that for
> whatever powerpc binaries may predate glibc, it is most likely that
> they
> would have taken use of the old select semantics. x86 and arm64 both
> implement this syscall with oldselect semantics.
> 
> Remove the powerpc implementation, and update syscall.tbl to refer to
> emit
> a reference to sys_old_select for 32-bit binaries, in keeping with
> how
> other architectures support syscall #82.
> 
> Signed-off-by: Rohan McLure <rmclure at linux.ibm.com>
> ---
> V1 -> V2: Remove arch-specific select handler
> ---
>  arch/powerpc/kernel/syscalls.c               | 18 ------------------
>  arch/powerpc/kernel/syscalls/syscall.tbl     |  2 +-
>  .../arch/powerpc/entry/syscalls/syscall.tbl  |  2 +-
>  3 files changed, 2 insertions(+), 20 deletions(-)

You should remove the declaration from
arch/powerpc/include/asm/syscalls.h, which I see you end up doing in
patch #6.

Apart from that:

Reviewed-by: Andrew Donnellan <ajd at linux.ibm.com>

> 
> diff --git a/arch/powerpc/kernel/syscalls.c
> b/arch/powerpc/kernel/syscalls.c
> index 9f339bcb433d..0afbcbd50433 100644
> --- a/arch/powerpc/kernel/syscalls.c
> +++ b/arch/powerpc/kernel/syscalls.c
> @@ -74,24 +74,6 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, size_t,
> len,
>         return do_mmap2(addr, len, prot, flags, fd, offset,
> PAGE_SHIFT);
>  }
>  
> -#ifdef CONFIG_PPC32
> -/*
> - * Due to some executables calling the wrong select we sometimes
> - * get wrong args.  This determines how the args are being passed
> - * (a single ptr to them all args passed) then calls
> - * sys_select() with the appropriate args. -- Cort
> - */
> -SYSCALL_DEFINE5(ppc_select, int, n, fd_set __user *, inp,
> -               fd_set __user *, outp, fd_set __user *, exp,
> -               struct __kernel_old_timeval __user *, tvp)
> -{
> -       if ((unsigned long)n >= 4096)
> -               return sys_old_select((void __user *)n);
> -
> -       return sys_select(n, inp, outp, exp, tvp);
> -}
> -#endif
> -
>  #ifdef CONFIG_PPC64
>  static inline long do_ppc64_personality(unsigned long personality)
>  {
> diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl
> b/arch/powerpc/kernel/syscalls/syscall.tbl
> index 59d9259dfbb5..c6cfcdf52c57 100644
> --- a/arch/powerpc/kernel/syscalls/syscall.tbl
> +++ b/arch/powerpc/kernel/syscalls/syscall.tbl
> @@ -110,7 +110,7 @@
>  79     common  settimeofday                    sys_settimeofday     
>            compat_sys_settimeofday
>  80     common  getgroups                       sys_getgroups
>  81     common  setgroups                       sys_setgroups
> -
> 82     32      select                          sys_ppc_select         
>          sys_ni_syscall
> +82     32      select                          sys_old_select       
>            sys_ni_syscall
>  82     64      select                          sys_ni_syscall
>  82     spu     select                          sys_ni_syscall
>  83     common  symlink                         sys_symlink
> diff --git a/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
> b/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
> index 437066f5c4b2..b4c970c9c6b1 100644
> --- a/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
> +++ b/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
> @@ -110,7 +110,7 @@
>  79     common  settimeofday                    sys_settimeofday     
>            compat_sys_settimeofday
>  80     common  getgroups                       sys_getgroups
>  81     common  setgroups                       sys_setgroups
> -
> 82     32      select                          sys_ppc_select         
>          sys_ni_syscall
> +82     32      select                          sys_old_select       
>            sys_ni_syscall
>  82     64      select                          sys_ni_syscall
>  82     spu     select                          sys_ni_syscall
>  83     common  symlink                         sys_symlink

-- 
Andrew Donnellan    OzLabs, ADL Canberra
ajd at linux.ibm.com   IBM Australia Limited



More information about the Linuxppc-dev mailing list