summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2011-06-14 16:48:51 +0200
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2011-06-29 19:23:05 +0200
commitae9fec983c95a6f0055c4ee477ac7f30e569cf7d (patch)
tree461011c71ec4ac16379717944dadb66c767bd148
parente1420eca7374cd8f583e9d774c890645a205aaee (diff)
downloaduClibc-alpine-ae9fec983c95a6f0055c4ee477ac7f30e569cf7d.tar.bz2
uClibc-alpine-ae9fec983c95a6f0055c4ee477ac7f30e569cf7d.tar.xz
libdl: search for ELF_RTYPE_CLASS_DLSYM in dlsym()
On FDPIC platforms, functions are passed by function descriptor, not by pointers. If you don't specify ELF_RTYPE_CLASS_DLSYM when calling _dl_find_hash() the return value from dlsym() will be a pointer not a function descriptor, crashing the program. The bug was introduced when TLS support was added in 534661b91c98492995274c364c8177c45efc63db Closes bug#3433 Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--ldso/libdl/libdl.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
index 52c77b00a..f59889c99 100644
--- a/ldso/libdl/libdl.c
+++ b/ldso/libdl/libdl.c
@@ -667,7 +667,7 @@ void *dlsym(void *vhandle, const char *name)
tpnt = NULL;
if (handle == _dl_symbol_tables)
tpnt = handle->dyn; /* Only search RTLD_GLOBAL objs if global object */
- ret = _dl_find_hash(name2, handle, tpnt, 0, &sym_ref);
+ ret = _dl_find_hash(name2, handle, tpnt, ELF_RTYPE_CLASS_DLSYM, &sym_ref);
#if defined(USE_TLS) && USE_TLS && defined SHARED
if (sym_ref.tpnt) {