diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | elf/dl-load.c | 2 | ||||
-rw-r--r-- | elf/rtld.c | 3 | ||||
-rw-r--r-- | include/dlfcn.h | 1 | ||||
-rwxr-xr-x | posix/globtest.sh | 19 |
5 files changed, 31 insertions, 4 deletions
@@ -1,13 +1,19 @@ 2003-10-26 Ulrich Drepper <drepper@redhat.com> + * include/dlfcn.h (__RTLD_OPENEXEC): Define. + * elf/dl-load.c (_dl_map_object_from_fd): Don't allow loading + executables unless __RTLD_OPENEXEC flag is present. + * elf/rtld.c (dl_main): Pass __RTLD_OPENEXEC flag to + _dl_map_object when loading the executable. + * sysdeps/generic/glob.c (glob): Handle GLOB_BRACE and escaping correctly. * posix/globtest.sh: Add tests for GLOB_BRACE and escaping. * resolv/nss_dns/dns-host.c (_nss_dns_gethostbyaddr_r): Default - reverse lookup format for IPv6 addresses is using bitfields and + reverse lookup format for IPv6 addresses is using bitstring and .ip6.arpa suffix. - * resolv/ns_name.c: Implement encoding and decoding bitfields in + * resolv/ns_name.c: Implement encoding and decoding bitstring in hex format. 2003-10-23 Jakub Jelinek <jakub@redhat.com> diff --git a/elf/dl-load.c b/elf/dl-load.c index 0b6e96f998..ecf2ee87eb 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1129,7 +1129,7 @@ cannot allocate TLS data structures for initial thread"); { /* This object is loaded at a fixed address. This must never happen for objects loaded with dlopen(). */ - if (__builtin_expect (mode & __RTLD_DLOPEN, 0)) + if (__builtin_expect ((mode & __RTLD_OPENEXEC) == 0, 0)) { errstring = N_("cannot dynamically load executable"); goto call_lose; diff --git a/elf/rtld.c b/elf/rtld.c index 7c4d961dbd..344fedeb95 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -787,7 +787,8 @@ of this helper program; chances are you did not intend to run this program.\n\ else { HP_TIMING_NOW (start); - INTUSE(_dl_map_object) (NULL, rtld_progname, 0, lt_library, 0, 0); + INTUSE(_dl_map_object) (NULL, rtld_progname, 0, lt_library, 0, + __RTLD_OPENEXEC); HP_TIMING_NOW (stop); HP_TIMING_DIFF (load_time, start, stop); diff --git a/include/dlfcn.h b/include/dlfcn.h index 31231cb282..c87b6d9c91 100644 --- a/include/dlfcn.h +++ b/include/dlfcn.h @@ -5,6 +5,7 @@ /* Internally used flag. */ #define __RTLD_DLOPEN 0x80000000 #define __RTLD_SPROF 0x40000000 +#define __RTLD_OPENEXEC 0x20000000 /* Now define the internal interfaces. */ extern void *__dlvsym (void *__handle, __const char *__name, diff --git a/posix/globtest.sh b/posix/globtest.sh index a0c03d3246..09af6f74f5 100755 --- a/posix/globtest.sh +++ b/posix/globtest.sh @@ -687,6 +687,25 @@ if test $failed -ne 0; then result=1 fi +# Test [[:punct:]] not matching leading period. +failed=0 +${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \ +${common_objpfx}posix/globtest -c "$testdir" "[[:punct:]]*" | +sort > $testout +cat <<"EOF" | $CMP - $testout >> $logfile || failed=1 +`*file6' +`-file3' +`\file9b\' +`\{file8\}' +`\{file9\,file9b\}' +`{file7,}' +`~file4' +EOF +if test $failed -ne 0; then + echo "Punct test failed" >> $logfile + result=1 +fi + if test $result -eq 0; then chmod 777 $testdir/noread rm -fr $testdir $testout |