This looks like you're trying to use a library compiled for
multithreading without providing it the address of a lock or unlock
function.

This is, incidentally, programmer FAQ #1, readable at
http://openssl.org/support/faq.html#PROG1 .

-Kyle H

On Thu, Jun 11, 2009 at 8:56 AM, Neil Youngman<n...@youngman.org.uk> wrote:
> I've got some crashes happening in i2d_X509_CINF(). I've manged to generate
> the valgrind trace below indicating where it's happening, but it's not yet
> obvious to me why it should happen. It's in some code that's been stable for
> ages (hence 0.9.6b) but there seems to be a rare situation in which it
> crashes with a SIGSEGV.
>
> Can anyone who is more familiar with openssl than me suggest what could cause
> this, or even where to look next? Or should I take this to the developers
> list?
>
> Note that I've cut out a number of "Conditional jump or move depends on
> uninitialised value(s)" messages that I don't believe are relevant.
>
> Neil Youngman
>
>
> ==1385== Invalid read of size 4
> ==1385==    at 0x41A3B23: CRYPTO_add_lock (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x406A328: ssl_cert_dup (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x4067255: SSL_new (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x80622E9: starttls_create_ssl (smtp-tls.c:358)
> ==1385==    by 0x8062A7C: rsp_starttls (smtp-tls.c:721)
> ==1385==    by 0x8064AA1: do_session (protocol.c:364)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==  Address 0x49b14e8 is 16 bytes inside a block of size 84 free'd
> ==1385==    at 0x40196BD: free (vg_replace_malloc.c:323)
> ==1385==    by 0x41A3FF1: CRYPTO_free (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x41EFC9B: X509_free (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x406A4B2: ssl_cert_free (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x40677D5: SSL_free (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x8066352: sio_detach (siobuf.c:147)
> ==1385==    by 0x8064B4D: do_session (protocol.c:385)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==
> ==1385== Invalid write of size 4
> ==1385==    at 0x41A3B27: CRYPTO_add_lock (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x406A328: ssl_cert_dup (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x4067255: SSL_new (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x80622E9: starttls_create_ssl (smtp-tls.c:358)
> ==1385==    by 0x8062A7C: rsp_starttls (smtp-tls.c:721)
> ==1385==    by 0x8064AA1: do_session (protocol.c:364)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==  Address 0x49b14e8 is 16 bytes inside a block of size 84 free'd
> ==1385==    at 0x40196BD: free (vg_replace_malloc.c:323)
> ==1385==    by 0x41A3FF1: CRYPTO_free (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x41EFC9B: X509_free (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x406A4B2: ssl_cert_free (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x40677D5: SSL_free (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x8066352: sio_detach (siobuf.c:147)
> ==1385==    by 0x8064B4D: do_session (protocol.c:385)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==
> ==1385== Invalid read of size 4
> ==1385==    at 0x41EF887: i2d_X509 (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x40638F0: ssl3_output_cert_chain (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x405FC1D: ssl3_send_client_certificate
> (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x405D96C: ssl3_connect (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x406801F: SSL_connect (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x8066426: sio_set_tlsclient_ssl (siobuf.c:203)
> ==1385==    by 0x8062A87: rsp_starttls (smtp-tls.c:721)
> ==1385==    by 0x8064AA1: do_session (protocol.c:364)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==  Address 0x49b14d8 is 0 bytes inside a block of size 84 free'd
> ==1385==    at 0x40196BD: free (vg_replace_malloc.c:323)
> ==1385==    by 0x41A3FF1: CRYPTO_free (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x41EFC9B: X509_free (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x406A4B2: ssl_cert_free (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x40677D5: SSL_free (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x8066352: sio_detach (siobuf.c:147)
> ==1385==    by 0x8064B4D: do_session (protocol.c:385)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==
> ==1385== Invalid read of size 4
> ==1385==    at 0x41EEE79: i2d_X509_CINF (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x41EF88E: i2d_X509 (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x40638F0: ssl3_output_cert_chain (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x405FC1D: ssl3_send_client_certificate
> (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x405D96C: ssl3_connect (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x406801F: SSL_connect (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x8066426: sio_set_tlsclient_ssl (siobuf.c:203)
> ==1385==    by 0x8062A87: rsp_starttls (smtp-tls.c:721)
> ==1385==    by 0x8064AA1: do_session (protocol.c:364)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==  Address 0xefefefef is not stack'd, malloc'd or (recently) free'd
> ==1385==
> ==1385== Process terminating with default action of signal 11 (SIGSEGV):
> dumping core
> ==1385==  Access not within mapped region at address 0xEFEFEFEF
> ==1385==    at 0x41EEE79: i2d_X509_CINF (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x41EF88E: i2d_X509 (in /lib/libcrypto.so.0.9.6b)
> ==1385==    by 0x40638F0: ssl3_output_cert_chain (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x405FC1D: ssl3_send_client_certificate
> (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x405D96C: ssl3_connect (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x406801F: SSL_connect (in /lib/libssl.so.0.9.6b)
> ==1385==    by 0x8066426: sio_set_tlsclient_ssl (siobuf.c:203)
> ==1385==    by 0x8062A87: rsp_starttls (smtp-tls.c:721)
> ==1385==    by 0x8064AA1: do_session (protocol.c:364)
> ==1385==    by 0x8059E7A: sendMessage(std::string const&, std::string const&,
> std::string const&, std::string const&, std::multimap<std::string,
> std::string, std::less<std::string>, std::allocator<std::pair<std::string
> const, std::string> > >&, std::multimap<std::string, std::string,
> std::less<std::string>, std::allocator<std::pair<std::string const,
> std::string> > >&, std::string const&, int, std::string const&, std::string&,
> std::string&, bool) (smtp.cpp:834)
> ==1385==    by 0x805D090: sendFile(std::string const&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&,
> std::multimap<std::string, std::string, std::less<std::string>,
> std::allocator<std::pair<std::string const, std::string> > >&, std::string&,
> std::string&, std::string&, int&) (smtp.cpp:1314)
> ==1385==    by 0x804DB02: main (main.cpp:228)
> ==1385==  If you believe this happened as a result of a stack overflow in your
> ==1385==  program's main thread (unlikely but possible), you can try to
> increase
> ==1385==  the size of the main thread stack using the --main-stacksize= flag.
> ==1385==  The main thread stack size used in this run was 8388608.
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    openssl-us...@openssl.org
> Automated List Manager                           majord...@openssl.org
>
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to