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. 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 -- Dr. Ludovic Rousseau _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel