diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-07-10 20:02:00 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-07-10 20:02:00 +0000 |
commit | 47a81620adc8c33631bd4b3b8d122c2a17940f8c (patch) | |
tree | cc9128904b2033f9184b42a149d434e2d86ed7af /sysdeps | |
parent | 8fdc11384ea3bddaaba026c98d21fa608d7d7a1d (diff) | |
download | glibc-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')
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 9 |
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; } |