about summary refs log tree commit diff
path: root/hurd/alloc-fd.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2017-12-17 23:49:46 +0000
committerAurelien Jarno <aurelien@aurel32.net>2017-12-31 13:06:18 +0100
commit248475457e40d44b12f1f69c889765bba4571add (patch)
tree7c29628e7eccc74c80a285905cb7d53dc1729099 /hurd/alloc-fd.c
parentc5b38f2ecec6facf818e3c50ad014be05b52c179 (diff)
downloadglibc-248475457e40d44b12f1f69c889765bba4571add.tar.gz
glibc-248475457e40d44b12f1f69c889765bba4571add.tar.xz
glibc-248475457e40d44b12f1f69c889765bba4571add.zip
elf: do not substitute dst in $LD_LIBRARY_PATH twice [BZ #22627]
Starting with commit
glibc-2.18.90-470-g2a939a7e6d81f109d49306bc2e10b4ac9ceed8f9 that
introduced substitution of dynamic string tokens in fillin_rpath,
_dl_init_paths invokes _dl_dst_substitute for $LD_LIBRARY_PATH twice:
the first time it's called directly, the second time the result
is passed on to fillin_rpath which calls expand_dynamic_string_token
which in turn calls _dl_dst_substitute, leading to the following
behaviour:

$ mkdir -p /tmp/'$ORIGIN' && cd /tmp/'$ORIGIN' &&
  echo 'int main(){}' |gcc -xc - &&
  strace -qq -E LD_LIBRARY_PATH='$ORIGIN' -e /open ./a.out
open("/tmp//tmp/$ORIGIN/tls/x86_64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/tmp//tmp/$ORIGIN/tls/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/tmp//tmp/$ORIGIN/x86_64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/tmp//tmp/$ORIGIN/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3

Fix this by removing the direct _dl_dst_substitute invocation.

* elf/dl-load.c (_dl_init_paths): Remove _dl_dst_substitute preparatory
code and invocation.

(cherry picked from commit bb195224acc14724e9fc2dbaa8d0b20b72ace79b)
Diffstat (limited to 'hurd/alloc-fd.c')
0 files changed, 0 insertions, 0 deletions