On 6/21/2011 9:56 AM, Ludovic Rousseau wrote:
> 2011/6/21 Ludovic Rousseau<ludovic.rouss...@gmail.com>:
>> Hello,
>>
>> I try to debug a PKCS#11 program using pkcs11-spy.
>> The problem is that for an unknown reason the C_Initialize() from the
>> spy is calling istelf instead of the C_Initialize from OpenSC.
>>
>> After some 261418 calls the program crashes because of a stack
>> exhaustion of something similar.
>>
>> With another program the pkcs11-spy works great. So the problem is not
>> general :-(
>>
>>
>> It looks like the C_Initialize symbol used by C_GetFunctionList() from
>> OpenSC is resolved using the C_Initialize from the spy and not the
>> C_Initialize from OpenSC.
>>
>> If I rename the function C_Initialize into C_InitializeX in
>> src/pkcs11/pkcs11-global.c and use C_InitializeX to initialize
>> pkcs11_function_list it works but I get the problem on the next
>> PKCS#11 call, C_GetSlotList in my case.
>>
>> The program exposing the problem is a C++ one. But maybe that is not related.
>> Anyone having the same problem?
>>
>> Any idea how to solve this?
>
> Using LD_DEBUG=all I get some debug info.
>
> With the working program I have:
>        2035: symbol=C_Initialize;  lookup in file=/home/lroussea/sc/TU/tellme 
> [0]
>        2035: symbol=C_Initialize;  lookup in file=/lib/libdl.so.2 [0]
>        2035: symbol=C_Initialize;  lookup in file=/lib/libpthread.so.0 [0]
>        2035: symbol=C_Initialize;  lookup in file=/usr/lib/libstdc++.so.6 [0]
>        2035: symbol=C_Initialize;  lookup in file=/lib/libm.so.6 [0]
>        2035: symbol=C_Initialize;  lookup in file=/lib/libgcc_s.so.1 [0]
>        2035: symbol=C_Initialize;  lookup in file=/lib/libc.so.6 [0]
>        2035: symbol=C_Initialize;  lookup in file=/lib64/ld-linux-x86-64.so.2 
> [0]
>        2035: symbol=C_Initialize;  lookup in
> file=/usr/lib/pkcs11/opensc-pkcs11.so [0]
>        2035: binding file /usr/lib/pkcs11/opensc-pkcs11.so [0] to
> /usr/lib/pkcs11/opensc-pkcs11.so [0]: normal symbol `C_Initialize'
>
> With the problematic program I have:
>        4621: symbol=C_Initialize;  lookup in file=../src/TestSuiteP11 [0]
>        4621: symbol=C_Initialize;  lookup in
> file=/usr/lib/libcppunit-1.12.so.1 [0]
>        4621: symbol=C_Initialize;  lookup in file=/lib/libdl.so.2 [0]
>        4621: symbol=C_Initialize;  lookup in file=/usr/lib/libssl.so.0.9.8 [0]
>        4621: symbol=C_Initialize;  lookup in file=/usr/lib/libcrypto.so.0.9.8 
> [0]
>        4621: symbol=C_Initialize;  lookup in file=/lib/libpthread.so.0 [0]
>        4621: symbol=C_Initialize;  lookup in file=/usr/lib/libstdc++.so.6 [0]
>        4621: symbol=C_Initialize;  lookup in file=/lib/libm.so.6 [0]
>        4621: symbol=C_Initialize;  lookup in file=/lib/libgcc_s.so.1 [0]
>        4621: symbol=C_Initialize;  lookup in file=/lib/libc.so.6 [0]
>        4621: symbol=C_Initialize;  lookup in file=/lib64/ld-linux-x86-64.so.2 
> [0]
>        4621: symbol=C_Initialize;  lookup in file=/usr/lib/libz.so.1 [0]
>        4621: symbol=C_Initialize;  lookup in
> file=/usr/lib/pkcs11/pkcs11-spy.so [0]
>        4621:
>        4621: file=/usr/lib/pkcs11/pkcs11-spy.so [0];  needed by
> /usr/lib/pkcs11/opensc-pkcs11.so [0] (relocation dependency)
>        4621:
>        4621: binding file /usr/lib/pkcs11/opensc-pkcs11.so [0] to
> /usr/lib/pkcs11/pkcs11-spy.so [0]: normal symbol `C_Initialize'
>
> Note the "relocation dependency".
> opensc-pkcs11.so is using a symbol from pkcs11-spy.so. This is the problem.

That should not happen.

Is it possible that the test program is causing opensc-pkcs11 to be loaded
because it was linked in, rather then being dynamically loaded based
on something like a --module option?

Can you identify the routine?
Is opensc-pkcs11 missing a routine, and only spy has the routine?

Could this have something to do C++ loading libs differently?

>
> After reading "Dynamic library loading inner workings" [1] I used
> -Bsymbolic to link opensc-pkcs11.so but with no success.
>
> To be continued...
>
> [1] http://sourceware.org/ml/libc-help/2010-12/msg00014.html
>

-- 

  Douglas E. Engert  <deeng...@anl.gov>
  Argonne National Laboratory
  9700 South Cass Avenue
  Argonne, Illinois  60439
  (630) 252-5444
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to