about summary refs log tree commit diff
path: root/elf/ldd.bash.in
diff options
context:
space:
mode:
Diffstat (limited to 'elf/ldd.bash.in')
-rw-r--r--elf/ldd.bash.in12
1 files changed, 7 insertions, 5 deletions
diff --git a/elf/ldd.bash.in b/elf/ldd.bash.in
index f400924217..c91886a1e6 100644
--- a/elf/ldd.bash.in
+++ b/elf/ldd.bash.in
@@ -74,6 +74,7 @@ For bug reporting instructions, please see:
     ;;
   -u | --u | --un | --unu | --unus | --unuse | --unused)
     unused=yes
+    bind_now=yes
     shift
     ;;
   --v | --ve | --ver)
@@ -153,7 +154,11 @@ warning: you do not have execution permission for" "\`$file'" >&2
     fi
     case $ret in
     0)
-      eval $add_env '"$file"' || result=1
+      # If the program exits with exit code 5, it means the process has been
+      # invoked with __libc_enable_secure.  Fall back to running it through
+      # the dynamic linker.
+      ( eval $add_env '"$file"'; ret=$?; [ $ret != 5 ] && exit $ret;
+        eval $add_env \${RTLD} '"$file"'; ) || result=1
       ;;
     1)
       # This can be a non-ELF binary or no binary at all.
@@ -163,10 +168,7 @@ warning: you do not have execution permission for" "\`$file'" >&2
       }
       ;;
     2)
-      # The following use of cat is needed to make ldd work in SELinux
-      # environments where the executed program might not have permissions
-      # to write to the console/tty.
-      eval $add_env \${RTLD} '"$file"' | cat || result=1
+      eval $add_env \${RTLD} '"$file"' || result=1
       ;;
     *)
       echo 'ldd:' ${RTLD} $"exited with unknown exit code" "($ret)" >&2