summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2004-12-08 10:57:20 +0000
committerJakub Jelinek <jakub@redhat.com>2004-12-08 10:57:20 +0000
commitfd74fc86fddfd1dbf64904a64d026d37c032c0ba (patch)
treeb9e3741cc509cf076bd2d4f159bb8a6e7f3d1f5c
parentff4eb01a424875d6ff9183c4f4f42d17743fee77 (diff)
* elf/ldd.bash.in: For -u, set bind_now=yes.cvs/fedora-glibc-2_3_3-89
If eval $add_env '"$file"' exits with exitcode 5, retry with eval $add_env \${RTLD} '"$file"'. Remove | cat usage, it breaks exit code propagation. * elf/rtld.c (process_envvars): If __libc_enable_secure and mode != normal, exit with exitcode 5.
-rw-r--r--ChangeLog9
-rw-r--r--elf/ldd.bash.in12
-rw-r--r--elf/rtld.c6
3 files changed, 20 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 17b59283ea..75a4f15a4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2004-12-08 Jakub Jelinek <jakub@redhat.com>
+
+ * elf/ldd.bash.in: For -u, set bind_now=yes.
+ If eval $add_env '"$file"' exits with exitcode 5, retry with
+ eval $add_env \${RTLD} '"$file"'.
+ Remove | cat usage, it breaks exit code propagation.
+ * elf/rtld.c (process_envvars): If __libc_enable_secure and
+ mode != normal, exit with exitcode 5.
+
2004-12-07 Jakub Jelinek <jakub@redhat.com>
* sysdeps/posix/sysconf.c (__sysconf_check_spec): Only define
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
diff --git a/elf/rtld.c b/elf/rtld.c
index 45c65af904..ee7291477f 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -2377,9 +2377,11 @@ process_envvars (enum mode *modep)
if (__access ("/etc/suid-debug", F_OK) != 0)
{
unsetenv ("MALLOC_CHECK_");
- if (mode == normal)
- GLRO(dl_debug_mask) = 0;
+ GLRO(dl_debug_mask) = 0;
}
+
+ if (mode != normal)
+ _exit (5);
}
/* If we have to run the dynamic linker in debugging mode and the
LD_DEBUG_OUTPUT environment variable is given, we write the debug