OSDN Git Service

Test case to exploit dladdr bug
authorCarmelo Amoroso <carmelo.amoroso@st.com>
Tue, 22 Jan 2008 15:37:32 +0000 (15:37 -0000)
committerCarmelo Amoroso <carmelo.amoroso@st.com>
Tue, 22 Jan 2008 15:37:32 +0000 (15:37 -0000)
Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
test/dlopen/Makefile
test/dlopen/dladdr.c [new file with mode: 0755]

index 7d57db0..b59c3e2 100644 (file)
@@ -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 (executable)
index 0000000..47ecea1
--- /dev/null
@@ -0,0 +1,25 @@
+#include <dlfcn.h>\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+int main(int argc, char **argv)\r
+{\r
+       Dl_info info;\r
+       int res = 0;\r
+\r
+       memset(&info, '\0', sizeof(Dl_info));\r
+       res = dladdr((void *)1, &info);\r
+       if (res != 0) {\r
+               fprintf(stderr, "dladdr() should fail\n");\r
+               fprintf(stderr, "dli_fname = %s\n", info.dli_fname);\r
+               fprintf(stderr, "dli_fbase = 0x%08x\n", (unsigned int)info.dli_fbase);\r
+               fprintf(stderr, "dli_sname = %s\n", info.dli_sname);\r
+               fprintf(stderr, "dli_saddr = 0x%08x\n", (unsigned int)info.dli_saddr);\r
+               exit(1);\r
+        }\r
+\r
+       fprintf(stderr, "dladdr() failed as expected\n");\r
+       return EXIT_SUCCESS;\r
+}\r
+\r