aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--elf/dl-load.c2
-rw-r--r--elf/rtld.c3
-rw-r--r--include/dlfcn.h1
-rwxr-xr-xposix/globtest.sh19
5 files changed, 31 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 924bd00967..04bc03bc2b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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