[v6,0/4] Args adjustment with ./ld.so exe [BZ #23293]

Message ID cover.1651757640.git.szabolcs.nagy@arm.com
Headers
Series Args adjustment with ./ld.so exe [BZ #23293] |

Message

Szabolcs Nagy May 5, 2022, 1:58 p.m. UTC
  The Hurd ld.so start code had to be adjusted. This revealed that
the fix actually cuts across abstraction layers: fiddles with
ELF entry stack layout in generic code, skipping the intermediate
OS sysdep layer. If the OS layer ever wants to do something more
complicated with the args then the interface contract with dl_main
will have to be reevaluated.

I ran cross tests for i686-gnu, but not execution tests, so the
changes in sysdeps/mach/hurd/dl-sysdep.c require a review.

The patches are in the nsz/bug23293-v6 branch.

Szabolcs Nagy (4):
  rtld: Use generic argv adjustment in ld.so [BZ #23293]
  rtld: Remove DL_ARGV_NOT_RELRO and make _dl_skip_args const
  linux: Add a getauxval test [BZ #23293]
  aarch64: Move ld.so _start to separate file and drop _dl_skip_args

 elf/rtld.c                               | 83 ++++++++++++++++++------
 sysdeps/aarch64/Makefile                 |  1 +
 sysdeps/aarch64/dl-machine.h             | 77 +---------------------
 sysdeps/aarch64/dl-start.S               | 53 +++++++++++++++
 sysdeps/aarch64/dl-sysdep.h              |  4 --
 sysdeps/alpha/dl-sysdep.h                | 23 -------
 sysdeps/arc/dl-sysdep.h                  |  4 --
 sysdeps/arm/dl-sysdep.h                  |  4 --
 sysdeps/csky/dl-sysdep.h                 | 23 -------
 sysdeps/generic/ldsodefs.h               | 13 +---
 sysdeps/ia64/dl-sysdep.h                 | 23 -------
 sysdeps/mach/hurd/dl-sysdep.c            | 30 ++++-----
 sysdeps/nios2/dl-sysdep.h                |  4 --
 sysdeps/s390/s390-32/dl-sysdep.h         | 23 -------
 sysdeps/sparc/dl-sysdep.h                | 23 -------
 sysdeps/unix/sysv/linux/Makefile         |  1 +
 sysdeps/unix/sysv/linux/ia64/dl-sysdep.h |  4 --
 sysdeps/unix/sysv/linux/tst-getauxval.c  | 74 +++++++++++++++++++++
 18 files changed, 209 insertions(+), 258 deletions(-)
 create mode 100644 sysdeps/aarch64/dl-start.S
 delete mode 100644 sysdeps/alpha/dl-sysdep.h
 delete mode 100644 sysdeps/csky/dl-sysdep.h
 delete mode 100644 sysdeps/ia64/dl-sysdep.h
 delete mode 100644 sysdeps/s390/s390-32/dl-sysdep.h
 delete mode 100644 sysdeps/sparc/dl-sysdep.h
 create mode 100644 sysdeps/unix/sysv/linux/tst-getauxval.c
  

Comments

Szabolcs Nagy May 6, 2022, 10:07 a.m. UTC | #1
The 05/05/2022 14:58, Szabolcs Nagy via Libc-alpha wrote:
> The Hurd ld.so start code had to be adjusted. This revealed that
> the fix actually cuts across abstraction layers: fiddles with
> ELF entry stack layout in generic code, skipping the intermediate
> OS sysdep layer. If the OS layer ever wants to do something more
> complicated with the args then the interface contract with dl_main
> will have to be reevaluated.

or i can avoid touching hurd code if the arg adjustment
is moved to linux dl-sysdep.c

then _dl_skip_args is kept on hurd (hurd can separately
fix that in its dl-sysdeps.c), so all targets can remove
it other than x86.