diff options
author | Carlos O'Donell <carlos@redhat.com> | 2014-11-06 15:48:44 -0500 |
---|---|---|
committer | Carlos O'Donell <carlos@redhat.com> | 2014-11-06 15:48:44 -0500 |
commit | da53d6dbc28d2a90d6e14dd661e68611c3b741cf (patch) | |
tree | 8d8a5a7c54d96c6a34a4780bd83a648ea073368a | |
parent | 9cf27b8d09aab26bd4693b10f281d64da779da83 (diff) | |
download | glibc-da53d6dbc28d2a90d6e14dd661e68611c3b741cf.zip glibc-da53d6dbc28d2a90d6e14dd661e68611c3b741cf.tar.gz glibc-da53d6dbc28d2a90d6e14dd661e68611c3b741cf.tar.bz2 |
Run check-localpltk/textrel/execstack over ld.so.
For maximum paranoia we run ld.so through the normal set
of tests for all of the shared libraries. This includes
running ld.so through check-localplt, check-textrel, and
check-execstack. While none of these should trigger any
failures given the way ld.so is built, it might possibly
fail if a developer does something wrong. This paranoia
was triggered by a discussion over the use of __strcpy
vs. strcpy [1] and if the symbol could leak and use the
libc.so version.
The check-localplt test fails right away because localplt.data
needs updating for all arches. By default we add 6 new symbols:
__tls_get_addr, __libc_memalign, malloc, calloc, realloc and
free. Other machines like i386, power, and s390 require some
different symbol sets e.g. ___tls_get_addr vs. __tls_get_addr
for i386.
Verified for i386
Verified for x86_64
Verified for ppc32
Verified for ppc64
Verified for ppc64le
Verified for arm
Verified for aarch64
Verified for s390
Verified for s390x
Guessed for alpha
Guessed for ia64
Guessed for m68k
Guessed for microblaze
Guessed for sparc32
Guessed for sparc64
Defaults for sh
Defaults for mips
Defaults for hppa
Defaults for tile
Machine manintainers notified to double check the data
used in localplt.data.
[1] https://sourceware.org/ml/libc-alpha/2014-10/msg00548.html
-rw-r--r-- | ChangeLog | 25 | ||||
-rw-r--r-- | elf/Makefile | 3 | ||||
-rw-r--r-- | sysdeps/generic/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/localplt.data | 11 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/m68k/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/microblaze/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/localplt.data | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data | 9 |
16 files changed, 151 insertions, 1 deletions
@@ -1,3 +1,28 @@ +2014-11-06 Carlos O'Donell <carlos@redhat.com> + + * elf/Makefile (all-built-dso): Add $(common-objpfx)elf/ld.so. + (localplt-build-dso): Add elf/ld.so. + * sysdeps/unix/sysv/linux/i386/localplt.data: Add ___tls_get_addr + i.e. 3 underscore version, __libc_memalign, malloc, calloc, realloc, + and free for ld.so. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data: Add + __libc_memalign, malloc, calloc, realloc, and free for ld.so. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data: + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data: + Likewise. + * sysdeps/unix/sysv/linux/s390/localplt.data: Likewise. + * sysdeps/generic/localplt.data: Add __tls_get_addr i.e. 2 underscore + version, __libc_memalign, malloc, calloc, realloc and free for ld.so. + * sysdeps/unix/sysv/linux/aarch64/localplt.data: Likewise. + * sysdeps/unix/sysv/linux/arm/localplt.data: Likewise. + * sysdeps/unix/sysv/linux/alpha/localplt.data: Likewise. + * sysdeps/unix/sysv/linux/ia64/localplt.data: Likewise. + * sysdeps/unix/sysv/linux/m68k/localplt.data: Likewise. + * sysdeps/unix/sysv/linux/microblaze/localplt.data: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data: Likewise. + 2014-11-05 Joseph Myers <joseph@codesourcery.com> [BZ #14132] diff --git a/elf/Makefile b/elf/Makefile index 94074f3..34f0b1f 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -904,7 +904,7 @@ CFLAGS-tst-pie2.c += $(pie-ccflag) $(objpfx)tst-pie1: $(objpfx)tst-piemod1.so ifeq (yes,$(build-shared)) -all-built-dso := $(common-objpfx)libc.so \ +all-built-dso := $(common-objpfx)elf/ld.so $(common-objpfx)libc.so \ $(filter-out $(common-objpfx)linkobj/libc.so, \ $(sort $(wildcard $(addprefix $(common-objpfx), \ */lib*.so \ @@ -963,6 +963,7 @@ common-generated += $(all-built-dso:$(common-objpfx)%=%.jmprel) localplt-built-dso := $(addprefix $(common-objpfx),\ libc.so \ + elf/ld.so \ math/libm.so \ rt/librt.so \ dlfcn/libdl.so \ diff --git a/sysdeps/generic/localplt.data b/sysdeps/generic/localplt.data index d296519..d7d6734 100644 --- a/sysdeps/generic/localplt.data +++ b/sysdeps/generic/localplt.data @@ -7,3 +7,12 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/aarch64/localplt.data b/sysdeps/unix/sysv/linux/aarch64/localplt.data index dfca9a7..a3392d3 100644 --- a/sysdeps/unix/sysv/linux/aarch64/localplt.data +++ b/sysdeps/unix/sysv/linux/aarch64/localplt.data @@ -12,3 +12,12 @@ libm.so: matherr libm.so: __signbit libm.so: __signbitf libm.so: __signbitl +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/alpha/localplt.data b/sysdeps/unix/sysv/linux/alpha/localplt.data index 6b2e515..e2a4311 100644 --- a/sysdeps/unix/sysv/linux/alpha/localplt.data +++ b/sysdeps/unix/sysv/linux/alpha/localplt.data @@ -24,3 +24,12 @@ libm.so: matherr # We used to offer inline functions that used this, so it must be exported. # Ought to reorg things such that carg isn't thus forced to use a plt. libm.so: __atan2 +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/arm/localplt.data b/sysdeps/unix/sysv/linux/arm/localplt.data index 109522e..85160bd 100644 --- a/sysdeps/unix/sysv/linux/arm/localplt.data +++ b/sysdeps/unix/sysv/linux/arm/localplt.data @@ -11,3 +11,12 @@ libm.so: __signbitf libm.so: matherr libpthread.so: __errno_location libpthread.so: raise +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/i386/localplt.data b/sysdeps/unix/sysv/linux/i386/localplt.data index 8fb56b6..009797b 100644 --- a/sysdeps/unix/sysv/linux/i386/localplt.data +++ b/sysdeps/unix/sysv/linux/i386/localplt.data @@ -5,3 +5,14 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader needs ___tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +# Note that it is triple underscore for ___tls_get_addr e.g. the alternate +# ABI. +ld.so: ___tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/ia64/localplt.data b/sysdeps/unix/sysv/linux/ia64/localplt.data index ba48816..bc2ce41 100644 --- a/sysdeps/unix/sysv/linux/ia64/localplt.data +++ b/sysdeps/unix/sysv/linux/ia64/localplt.data @@ -6,3 +6,12 @@ libc.so: realloc libm.so: matherr libm.so: matherrf libm.so: matherrl +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/m68k/localplt.data b/sysdeps/unix/sysv/linux/m68k/localplt.data index d266b8f..15a9fe5 100644 --- a/sysdeps/unix/sysv/linux/m68k/localplt.data +++ b/sysdeps/unix/sysv/linux/m68k/localplt.data @@ -6,3 +6,12 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/microblaze/localplt.data b/sysdeps/unix/sysv/linux/microblaze/localplt.data index 6dd5bcb..f488c95 100644 --- a/sysdeps/unix/sysv/linux/microblaze/localplt.data +++ b/sysdeps/unix/sysv/linux/microblaze/localplt.data @@ -9,3 +9,12 @@ libm.so: __signbit libm.so: __signbitf libm.so: matherr libpthread.so: __errno_location +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data index 8fb56b6..b25abf8 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data @@ -5,3 +5,11 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader uses __libc_memalign internally to allocate aligned +# TLS storage. The other malloc family of functions are expected to allow +# user symbol interposition. +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data index 6332a00..0b3b327 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data @@ -38,3 +38,11 @@ libm.so: __signbitl libm.so: copysignl ? libm.so: fabsl libm.so: matherr +# The dynamic loader uses __libc_memalign internally to allocate aligned +# TLS storage. The other malloc family of functions are expected to allow +# user symbol interposition. +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data index 2219aa9..49d5de6 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data @@ -4,3 +4,11 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader uses __libc_memalign internally to allocate aligned +# TLS storage. The other malloc family of functions are expected to +# allow user symbol interposition. +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/s390/localplt.data b/sysdeps/unix/sysv/linux/s390/localplt.data index 8fb56b6..b25abf8 100644 --- a/sysdeps/unix/sysv/linux/s390/localplt.data +++ b/sysdeps/unix/sysv/linux/s390/localplt.data @@ -5,3 +5,11 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader uses __libc_memalign internally to allocate aligned +# TLS storage. The other malloc family of functions are expected to allow +# user symbol interposition. +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data index 15ba18b..81c1650 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data @@ -15,3 +15,12 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data index 6f1769c..d6f9e02 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data @@ -17,3 +17,12 @@ libc.so: malloc libc.so: memalign libc.so: realloc libm.so: matherr +# The dynamic loader needs __tls_get_addr for TLS, and uses __libc_memalign +# internally to allocate aligned TLS storage. The other malloc family of +# functions are expected to allow user symbol interposition. +ld.so: __tls_get_addr +ld.so: __libc_memalign +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free |