about summary refs log tree commit diff
path: root/sysdeps/generic/dl-sysdep.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-07-10 20:02:00 +0000
committerUlrich Drepper <drepper@redhat.com>2000-07-10 20:02:00 +0000
commit47a81620adc8c33631bd4b3b8d122c2a17940f8c (patch)
treecc9128904b2033f9184b42a149d434e2d86ed7af /sysdeps/generic/dl-sysdep.c
parent8fdc11384ea3bddaaba026c98d21fa608d7d7a1d (diff)
downloadglibc-47a81620adc8c33631bd4b3b8d122c2a17940f8c.tar.gz
glibc-47a81620adc8c33631bd4b3b8d122c2a17940f8c.tar.xz
glibc-47a81620adc8c33631bd4b3b8d122c2a17940f8c.zip
Update.
2000-07-09  Mark Kettenis  <kettenis@gnu.org>

	* elf/rtld.c (dl_main): Move call to __libc_check_standard_fds...
	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): ... to here.

2000-07-10  Ulrich Drepper  <drepper@redhat.com>

	* include/features.h: Include ISO C99 features if the compiler used
	is an ISO C99 compiler.
	Patch by Joseph S. Myers <jsm28@cam.ac.uk>.

2000-07-08  Mark Kettenis  <kettenis@gnu.org>

	* iconv/gconv_conf.c: Include <bits/libc-lock.h>.
Diffstat (limited to 'sysdeps/generic/dl-sysdep.c')
-rw-r--r--sysdeps/generic/dl-sysdep.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c
index 5994af3986..1b00775d72 100644
--- a/sysdeps/generic/dl-sysdep.c
+++ b/sysdeps/generic/dl-sysdep.c
@@ -45,6 +45,9 @@ extern fpu_control_t _dl_fpu_control;
 extern void _end;
 extern void ENTRY_POINT (void);
 
+/* Protect SUID program against misuse of file descriptors.  */
+extern void __libc_check_standard_fds (void);
+
 ElfW(Addr) _dl_base_addr;
 int __libc_enable_secure;
 int __libc_multiple_libcs = 0;	/* Defining this here avoids the inclusion
@@ -167,6 +170,12 @@ _dl_sysdep_start (void **start_argptr,
        will see this new value and not clobber our data.  */
     __sbrk (_dl_pagesize - ((&_end - (void *) 0) & (_dl_pagesize - 1)));
 
+  /* If this is a SUID program we make sure that FDs 0, 1, and 2 are
+     allocated.  If necessary we are doing it ourself.  If it is not
+     possible we stop the program.  */
+  if (__builtin_expect (__libc_enable_secure, 0))
+    __libc_check_standard_fds ();
+
   (*dl_main) (phdr, phnum, &user_entry);
   return user_entry;
 }