Hi All,

An FYI to keep folks out of a distro's bug tracker.

It appears that Debian's port of Crypto++ is missing the symbol for
g_nullNameValuePairs in libcrypto++.so. Ubuntu is guilty by
association.
Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=600128
Ubuntu: https://bugs.launchpad.net/bugs/660171

While the symbol is missing in the shared object file, the symbol *is*
present in libcrypto++.a. It appears to be causing interesting
behavior, particularly in the case of a torture test verifying correct
global c++ object destruction.

One of the files (a testdso.so object) has a dependency on
libcrypto++. So the link-loader resolves a symbol for
AutoSeededRandomPool. The dsotest.so calls dlopen(libcrypto++.so, ...)
and tries to locate g_nullNameValuePairs using dlsym (both decorated
and undecorated names) through the address returned in dlopen. I had
*assumed* the Linux link-loader would simply return the same pointer
(from initial load returned by mmap) and bump a reference count.

The first call to dlsym resulted in a crash. When examining screen
output and the full back trace, I noticed libcrypto++ had two
different addresses - one due to the link-loader, the second due to
dlopen. So it appears something is munged.

Zokoo - yet another possible cause of you python issue. And the global
RandomNumberGenerator and global NameValuePairs might not be the cause
of [1].

Jeff

[1] Errors with multiple loading cryptopp as shared lib on Linux,
http://groups.google.com/group/cryptopp-users/browse_thread/thread/68fbc22e8c6e2f48

======================================
r...@bruno:/# whereis libcrypto++
libcrypto++: /usr/lib/libcrypto++.so /usr/lib/libcrypto++.a
/usr/lib64/libcrypto++.so /usr/lib64/libcrypto++.a

r...@bruno:/# nm /usr/lib/libcryptopp.a | grep g_nullNameValuePairs
                U _ZN8CryptoPP20g_nullNameValuePairsE
0000000000000010 B _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
r...@bruno:/# nm /usr/lib/libcryptopp.so | grep g_nullNameValuePairs
nm: /usr/lib/libcryptopp.so: no symbols
r...@bruno:/# nm /usr/lib64/libcryptopp.a | grep g_nullNameValuePairs
                U _ZN8CryptoPP20g_nullNameValuePairsE
0000000000000010 B _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
                U _ZN8CryptoPP20g_nullNameValuePairsE
r...@bruno:/# nm /usr/lib64/libcryptopp.so | grep g_nullNameValuePairs
nm: /usr/lib64/libcryptopp.so: no symbols

-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.

Reply via email to