svn commit: trunk/uClibc/test/dlopen

Carmelo AMOROSO carmelo.amoroso at st.com
Tue Jan 22 15:51:27 UTC 2008


Hello,
below the output of the test case executed in different scenarios (on 
uClibc-nptl for sh4)
with some comments

/* CASE 1: Broken implementation of dladdr */

root at arcidiaf:/home/filippo/uclibc-test/dlopen# ./dladdr

dladdr() should fail
info->dli_fname = (null)
info->dli_fbase = 0x00000000
info->dli_sname = (null)
info->dli_saddr = 0x00000000
root at arcidiaf:/home/filippo/uclibc-test/dlopen# echo $?
1

/* dladdr should fail (returning 0), but it returns a value != 0, so it 
means that if found
at least a module in which the addr falls, so dli_fname and dli_fbase 
should be set,
while actually they are null */


/* CASE 2: Fixed dladdr, but without the loadaddr -> mapaddr fix */

root at arcidiaf:/home/filippo/uclibc-test/dlopen# ./dladdr

dladdr() should fail
info->dli_fname = ./dladdr
info->dli_fbase = 0x00000000
info->dli_sname = (null)
info->dli_saddr = 0x00000000
root at arcidiaf:/home/filippo/uclibc-test/dlopen# echo $?
1

/* Partially fixed: dladdr should fail (returning 0), but it returns a 
value != 0, so it means that if found
at least a module in which the addr falls, so dli_fname and dli_fbase 
should be set, actually
dli_fbase is set to the main application and dli_fbase is set to its 
loaddr, that is 0 */

root at arcidiaf:/home/filippo/uclibc-test/dlopen#

/* CASE 3: fully fixed, using mapaddr instead of loadaddr */

root at arcidiaf:/home/filippo/uclibc-test/dlopen# ./dladdr
dladdr() failed as expected
root at arcidiaf:/home/filippo/uclibc-test/dlopen# echo $?
0

/* The is not module in which the addr (1) falls */





carmelo at uclibc.org wrote:
> Author: carmelo
> Date: 2008-01-22 07:37:32 -0800 (Tue, 22 Jan 2008)
> New Revision: 20884
>
> Log:
> Test case to exploit dladdr bug
>
> Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono at st.com>
>
>
> Added:
> trunk/uClibc/test/dlopen/dladdr.c
>
> Modified:
> trunk/uClibc/test/dlopen/Makefile
>
>
> Changeset:
> Modified: trunk/uClibc/test/dlopen/Makefile
> ===================================================================
> --- trunk/uClibc/test/dlopen/Makefile 2008-01-21 13:46:01 UTC (rev 20883)
> +++ trunk/uClibc/test/dlopen/Makefile 2008-01-22 15:37:32 UTC (rev 20884)
> @@ -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_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)"
>
> Added: trunk/uClibc/test/dlopen/dladdr.c
> ===================================================================
> --- trunk/uClibc/test/dlopen/dladdr.c (rev 0)
> +++ trunk/uClibc/test/dlopen/dladdr.c 2008-01-22 15:37:32 UTC (rev 20884)
> @@ -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;
> +}
> +
>
>
> Property changes on: trunk/uClibc/test/dlopen/dladdr.c
> ___________________________________________________________________
> Name: svn:executable
> + *
>
> _______________________________________________
> uClibc-cvs mailing list
> uClibc-cvs at uclibc.org
> http://busybox.net/cgi-bin/mailman/listinfo/uclibc-cvs
>




More information about the uClibc-cvs mailing list