From 6c61a9fdfbb4c9c762fd4d0c6179dd77e0f6660f Mon Sep 17 00:00:00 2001 From: Carmelo Amoroso Date: Tue, 22 Jan 2008 15:37:32 +0000 Subject: Test case to exploit dladdr bug Signed-off-by: Filippo Arcidiacono --- test/dlopen/Makefile | 3 ++- test/dlopen/dladdr.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100755 test/dlopen/dladdr.c (limited to 'test') diff --git a/test/dlopen/Makefile b/test/dlopen/Makefile index 7d57db067..b59c3e2d2 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 dlstatic test1 test2 test3 dlundef dlafk +TESTS := dltest dltest2 dlstatic test1 test2 test3 dlundef dlafk dladdr include ../Test.mak @@ -19,6 +19,7 @@ LDFLAGS_dlafk := -ldl ./libafk.so -Wl,-rpath,. 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 100755 index 000000000..47ecea1da --- /dev/null +++ b/test/dlopen/dladdr.c @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +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; +} + -- cgit v1.2.3