diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-10-27 21:33:40 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-10-27 21:33:40 +0000 |
commit | 32738a227007c089581a62621c673dceabd1c08d (patch) | |
tree | 25cc0ed7c3e521930ac8ef538b37b54e0903b2cc /elf | |
parent | b1f68750871f1d447fb7d36b24590084239730b5 (diff) | |
download | glibc-32738a227007c089581a62621c673dceabd1c08d.tar.gz glibc-32738a227007c089581a62621c673dceabd1c08d.tar.xz glibc-32738a227007c089581a62621c673dceabd1c08d.zip |
Update.
2004-10-27 Jakub Jelinek <jakub@redhat.com> * include/resolv.h (_res_opcodes): New extern. Add libresolv_hidden_proto. * resolv/res_debug.c (_res_opcodes): Remove. (__p_class_syms, __p_type_syms): Add libresolv_hidden_proto and libresolv_hidden_data_def. Remove attribute_hidden. * resolv/res_mkquery (_res_opcodes): Remove. * resolv/res_data.c (_res_opcodes): Remove attribute_hidden. Add libresolv_hidden_data_def. * elf/dl-open.c (_dl_open): Don't allow explicitly opening a DSO into an empty namespace.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-open.c | 6 | ||||
-rw-r--r-- | elf/tst-dlmopen3.c | 23 |
2 files changed, 29 insertions, 0 deletions
diff --git a/elf/dl-open.c b/elf/dl-open.c index 2ab1e307a4..294a523aac 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -570,6 +570,12 @@ _dl_open (const char *file, int mode, const void *caller_dlopen, Lmid_t nsid) no more namespaces available for dlmopen()")); } } + /* Never allow loading a DSO in a namespace which is empty. Such + direct placements is only causing problems. */ + else if (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER + && GL(dl_ns)[nsid]._ns_nloaded == 0) + GLRO(dl_signal_error) (EINVAL, file, NULL, + N_("invalid target namespace in dlmopen()")); args.file = file; args.mode = mode; diff --git a/elf/tst-dlmopen3.c b/elf/tst-dlmopen3.c new file mode 100644 index 0000000000..da951ca806 --- /dev/null +++ b/elf/tst-dlmopen3.c @@ -0,0 +1,23 @@ +#include <dlfcn.h> +#include <stdio.h> +#include <gnu/lib-names.h> + + +static int +do_test (void) +{ + void *h = dlmopen (LM_ID_NEWLM, "$ORIGIN/tst-dlmopen1mod.so", RTLD_LAZY); + if (h == NULL) + { + printf ("cannot get handle for %s: %s\n", + "tst-dlmopen1mod.so", dlerror ()); + return 1; + } + + /* Do not unload. */ + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |