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 /sysdeps | |
parent | 9cf27b8d09aab26bd4693b10f281d64da779da83 (diff) | |
download | glibc-da53d6dbc28d2a90d6e14dd661e68611c3b741cf.tar.gz glibc-da53d6dbc28d2a90d6e14dd661e68611c3b741cf.tar.xz glibc-da53d6dbc28d2a90d6e14dd661e68611c3b741cf.zip |
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
Diffstat (limited to 'sysdeps')
-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 |
14 files changed, 124 insertions, 0 deletions
diff --git a/sysdeps/generic/localplt.data b/sysdeps/generic/localplt.data index d2965199f3..d7d673454f 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 dfca9a7ac7..a3392d3773 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 6b2e51599c..e2a4311cbd 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 109522e37e..85160bde52 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 8fb56b6086..009797bc06 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 ba488163bb..bc2ce41665 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 d266b8f74b..15a9fe5beb 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 6dd5bcb4de..f488c9579c 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 8fb56b6086..b25abf8006 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 6332a006d8..0b3b32739f 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 2219aa9048..49d5de6019 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 8fb56b6086..b25abf8006 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 15ba18b96d..81c1650764 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 6f1769c026..d6f9e02e88 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 |