diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-01-23 13:02:20 +0000 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-01-23 13:02:20 +0000 |
commit | a10de53ae0f09eff480273d34a6a3a40236e5bd5 (patch) | |
tree | d6790919948c5ab9488b57fe5316e0a7b00004f4 | |
parent | 30e579262f92beff00fce8c209e12b795a34f9f3 (diff) | |
download | uClibc-alpine-a10de53ae0f09eff480273d34a6a3a40236e5bd5.tar.bz2 uClibc-alpine-a10de53ae0f09eff480273d34a6a3a40236e5bd5.tar.xz |
Test case to exploit dladdr bug
Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
-rw-r--r-- | test/dlopen/Makefile | 3 | ||||
-rw-r--r-- | test/dlopen/dladdr.c | 25 |
2 files changed, 27 insertions, 1 deletions
diff --git a/test/dlopen/Makefile b/test/dlopen/Makefile index bfe4ec8ba..8f1b8330b 100644 --- a/test/dlopen/Makefile +++ b/test/dlopen/Makefile @@ -4,7 +4,7 @@ # rules need a little love to work with glibc ... export UCLIBC_ONLY := 1 -TESTS := dltest dltest2 test1 test2 test3 +TESTS := dltest dltest2 test1 test2 test3 dladdr ifeq ($(UCLIBC_STATIC),y) TESTS_DISABLED := test3 @@ -21,6 +21,7 @@ LDFLAGS_dltest2 := -ldl -lpthread LDFLAGS_test1 := -ldl LDFLAGS_test2 := -ldl LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,. +LDFLAGS_dladdr := -ldl DEBUG_LIBS := X WRAPPER := env $(DEBUG_LIBS)=all LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)" diff --git a/test/dlopen/dladdr.c b/test/dlopen/dladdr.c new file mode 100644 index 000000000..b64c000bc --- /dev/null +++ b/test/dlopen/dladdr.c @@ -0,0 +1,25 @@ +#include <dlfcn.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +int main(int argc, char **argv) +{ + Dl_info info; + int res = 0; + + memset(&info, '\0', sizeof(Dl_info)); + res = dladdr((void *)1, &info); + if (res != 0) { + fprintf(stderr, "dladdr() should fail\n"); + fprintf(stderr, "dli_fname = %s\n", info.dli_fname); + fprintf(stderr, "dli_fbase = 0x%08x\n", (unsigned int)info.dli_fbase); + fprintf(stderr, "dli_sname = %s\n", info.dli_sname); + fprintf(stderr, "dli_saddr = 0x%08x\n", (unsigned int)info.dli_saddr); + exit(1); + } + + fprintf(stderr, "dladdr() failed as expected\n"); + return EXIT_SUCCESS; +} + |