Hi,

I'm running into a deadlock using openssl 1.0.0h. it's a
multi-threaded ssl proxy based on openssl and libevent, but i think
the problem is much more related to openssl than libevent.

there are 4 worker threads (5, 4, 3, 2), 1 external report thread (6),
i think we can ignore this one, and 1 main thread.

Incoming connections will be dispatched to these 4 worker threads. A
X509_STORE object is shared by these 4 worker thread for peer
certificate verification.

here is the gdb output when deadlock happened. the OS is linux 2.6.35.

I can not figure out how this deadlock could happen and will be glad
to provide more information if required. any help will be appreciated.

(gdb) thread apply all bt

Thread 6 (Thread 0x7f2b9f13d950 (LWP 1280)):
#0  0x00007f2b9fa1f3d8 in epoll_wait () from /lib/libc.so.6
#1  0x00007f2ba0fc15c5 in epoll_dispatch (base=0x8be4f40,
tv=<optimized out>) at epoll.c:407
#2  0x00007f2ba0fafb26 in event_base_loop (base=0x8be4f40,
flags=<optimized out>) at event.c:1603
#3  0x000000000040f98d in CTRL_main (arg=0x61c010) at ctrl.c:134
#4  0x00007f2ba03363c4 in start_thread () from /lib/libpthread.so.0
#5  0x00007f2b9fa1eefd in clone () from /lib/libc.so.6
#6  0x0000000000000000 in ?? ()

Thread 5 (Thread 0x7f2b9e93c950 (LWP 1281)):
#0  0x00007f2ba033cfb4 in __lll_lock_wait () from /lib/libpthread.so.0
#1  0x00007f2ba0338a62 in _L_lock_52 () from /lib/libpthread.so.0
#2  0x00007f2ba03383a5 in pthread_mutex_lock () from /lib/libpthread.so.0
#3  0x00007f2ba12e41f5 in X509_PUBKEY_get () from /usr/lib/libcrypto.so.1.0.0
#4  0x00007f2ba1302282 in ?? () from /usr/lib/libcrypto.so.1.0.0
#5  0x00007f2ba1302d6d in X509_verify_cert () from /usr/lib/libcrypto.so.1.0.0
#6  0x00007f2ba077b4c2 in SYAN_X509_STORE_verify () from /usr/lib/libsyan2.so
#7  0x0000000000409b5d in SSLX_verify_callback (ctx=<optimized out>,
c=0x61c010, x=0x7f2b8c12dfa0) at sslx.c:139
#8  0x00007f2ba15fa2ae in ssl_verify_cert_chain () from /usr/lib/libssl.so.1.0.0
#9  0x00007f2ba15cad53 in ssl3_get_client_certificate () from
/usr/lib/libssl.so.1.0.0
#10 0x00007f2ba15cefb7 in ssl3_accept () from /usr/lib/libssl.so.1.0.0
#11 0x00007f2ba0d9b6ce in do_handshake (bev_ssl=0x7f2b8805c740) at
bufferevent_openssl.c:990
#12 0x00007f2ba0d9ba28 in be_openssl_handshakeeventcb (fd=<optimized
out>, what=0, ptr=0x7f2b8805c740) at bufferevent_openssl.c:1046
#13 0x00007f2ba0fafe5c in event_process_active_single_queue
(activeq=<optimized out>, base=<optimized out>) at event.c:1346
#14 event_process_active (base=<optimized out>) at event.c:1416
#15 event_base_loop (base=0x8be5bd0, flags=<optimized out>) at event.c:1617
#16 0x00007f2ba0994af5 in ?? () from /usr/lib/libevext.so
#17 0x00007f2ba03363c4 in start_thread () from /lib/libpthread.so.0
#18 0x00007f2b9fa1eefd in clone () from /lib/libc.so.6
#19 0x0000000000000000 in ?? ()

Thread 4 (Thread 0x7f2b9e13b950 (LWP 1282)):
#0  0x00007f2ba033cfb4 in __lll_lock_wait () from /lib/libpthread.so.0
#1  0x00007f2ba0338a62 in _L_lock_52 () from /lib/libpthread.so.0
#2  0x00007f2ba03383a5 in pthread_mutex_lock () from /lib/libpthread.so.0
#3  0x00007f2ba1257077 in CRYPTO_add_lock () from /usr/lib/libcrypto.so.1.0.0
#4  0x00007f2ba12dbc23 in ?? () from /usr/lib/libcrypto.so.1.0.0
#5  0x00007f2ba12d5f4a in EVP_VerifyFinal () from /usr/lib/libcrypto.so.1.0.0
#6  0x00007f2ba12e1fb6 in ASN1_item_verify () from /usr/lib/libcrypto.so.1.0.0
#7  0x00007f2ba1302299 in ?? () from /usr/lib/libcrypto.so.1.0.0
#8  0x00007f2ba1302d6d in X509_verify_cert () from /usr/lib/libcrypto.so.1.0.0
#9  0x00007f2ba077b4c2 in SYAN_X509_STORE_verify () from /usr/lib/libsyan2.so
#10 0x0000000000409b5d in SSLX_verify_callback (ctx=<optimized out>,
c=0x61c010, x=0x8e3c370) at sslx.c:139
#11 0x00007f2ba15fa2ae in ssl_verify_cert_chain () from /usr/lib/libssl.so.1.0.0
#12 0x00007f2ba15cad53 in ssl3_get_client_certificate () from
/usr/lib/libssl.so.1.0.0
#13 0x00007f2ba15cefb7 in ssl3_accept () from /usr/lib/libssl.so.1.0.0
#14 0x00007f2ba0d9b6ce in do_handshake (bev_ssl=0x7f2b8c059990) at
bufferevent_openssl.c:990
#15 0x00007f2ba0d9ba28 in be_openssl_handshakeeventcb (fd=<optimized
out>, what=0, ptr=0x7f2b8c059990) at bufferevent_openssl.c:1046
#16 0x00007f2ba0fafe5c in event_process_active_single_queue
(activeq=<optimized out>, base=<optimized out>) at event.c:1346
#17 event_process_active (base=<optimized out>) at event.c:1416
#18 event_base_loop (base=0x8be8310, flags=<optimized out>) at event.c:1617
#19 0x00007f2ba0994af5 in ?? () from /usr/lib/libevext.so
#20 0x00007f2ba03363c4 in start_thread () from /lib/libpthread.so.0
#21 0x00007f2b9fa1eefd in clone () from /lib/libc.so.6
#22 0x0000000000000000 in ?? ()

Thread 3 (Thread 0x7f2b9d93a950 (LWP 1283)):
#0  0x00007f2ba033cfb4 in __lll_lock_wait () from /lib/libpthread.so.0
#1  0x00007f2ba0338a62 in _L_lock_52 () from /lib/libpthread.so.0
#2  0x00007f2ba03383a5 in pthread_mutex_lock () from /lib/libpthread.so.0
#3  0x00007f2ba1257077 in CRYPTO_add_lock () from /usr/lib/libcrypto.so.1.0.0
#4  0x00007f2ba12d6299 in EVP_PKEY_free () from /usr/lib/libcrypto.so.1.0.0
#5  0x00007f2ba12e4204 in X509_PUBKEY_get () from /usr/lib/libcrypto.so.1.0.0
#6  0x00007f2ba1302282 in ?? () from /usr/lib/libcrypto.so.1.0.0
#7  0x00007f2ba1302d6d in X509_verify_cert () from /usr/lib/libcrypto.so.1.0.0
#8  0x00007f2ba077b4c2 in SYAN_X509_STORE_verify () from /usr/lib/libsyan2.so
#9  0x0000000000409b5d in SSLX_verify_callback (ctx=<optimized out>,
c=0x61c010, x=0x7f2b880d99a0) at sslx.c:139
#10 0x00007f2ba15fa2ae in ssl_verify_cert_chain () from /usr/lib/libssl.so.1.0.0
#11 0x00007f2ba15cad53 in ssl3_get_client_certificate () from
/usr/lib/libssl.so.1.0.0
#12 0x00007f2ba15cefb7 in ssl3_accept () from /usr/lib/libssl.so.1.0.0
#13 0x00007f2ba0d9b6ce in do_handshake (bev_ssl=0x8c72330) at
bufferevent_openssl.c:990
#14 0x00007f2ba0d9ba28 in be_openssl_handshakeeventcb (fd=<optimized
out>, what=0, ptr=0x8c72330) at bufferevent_openssl.c:1046
#15 0x00007f2ba0fafe5c in event_process_active_single_queue
(activeq=<optimized out>, base=<optimized out>) at event.c:1346
#16 event_process_active (base=<optimized out>) at event.c:1416
#17 event_base_loop (base=0x8beaa50, flags=<optimized out>) at event.c:1617
---Type <return> to continue, or q <return> to quit---
#18 0x00007f2ba0994af5 in ?? () from /usr/lib/libevext.so
#19 0x00007f2ba03363c4 in start_thread () from /lib/libpthread.so.0
#20 0x00007f2b9fa1eefd in clone () from /lib/libc.so.6
#21 0x0000000000000000 in ?? ()

Thread 2 (Thread 0x7f2b97fff950 (LWP 1284)):
#0  0x00007f2ba033cfb4 in __lll_lock_wait () from /lib/libpthread.so.0
#1  0x00007f2ba0338a62 in _L_lock_52 () from /lib/libpthread.so.0
#2  0x00007f2ba03383a5 in pthread_mutex_lock () from /lib/libpthread.so.0
#3  0x00007f2ba1257077 in CRYPTO_add_lock () from /usr/lib/libcrypto.so.1.0.0
#4  0x00007f2ba12d6299 in EVP_PKEY_free () from /usr/lib/libcrypto.so.1.0.0
#5  0x00007f2ba12db7ad in EVP_PKEY_CTX_free () from /usr/lib/libcrypto.so.1.0.0
#6  0x00007f2ba12d5fa3 in EVP_VerifyFinal () from /usr/lib/libcrypto.so.1.0.0
#7  0x00007f2ba12e1fb6 in ASN1_item_verify () from /usr/lib/libcrypto.so.1.0.0
#8  0x00007f2ba1302299 in ?? () from /usr/lib/libcrypto.so.1.0.0
#9  0x00007f2ba1302d6d in X509_verify_cert () from /usr/lib/libcrypto.so.1.0.0
#10 0x00007f2ba077b4c2 in SYAN_X509_STORE_verify () from /usr/lib/libsyan2.so
#11 0x0000000000409b5d in SSLX_verify_callback (ctx=<optimized out>,
c=0x61c010, x=0x7f2b9811dd30) at sslx.c:139
#12 0x00007f2ba15fa2ae in ssl_verify_cert_chain () from /usr/lib/libssl.so.1.0.0
#13 0x00007f2ba15cad53 in ssl3_get_client_certificate () from
/usr/lib/libssl.so.1.0.0
#14 0x00007f2ba15cefb7 in ssl3_accept () from /usr/lib/libssl.so.1.0.0
#15 0x00007f2ba0d9b6ce in do_handshake (bev_ssl=0x8c379b0) at
bufferevent_openssl.c:990
#16 0x00007f2ba0d9ba28 in be_openssl_handshakeeventcb (fd=<optimized
out>, what=0, ptr=0x8c379b0) at bufferevent_openssl.c:1046
#17 0x00007f2ba0fafe5c in event_process_active_single_queue
(activeq=<optimized out>, base=<optimized out>) at event.c:1346
#18 event_process_active (base=<optimized out>) at event.c:1416
#19 event_base_loop (base=0x8bed1e0, flags=<optimized out>) at event.c:1617
#20 0x00007f2ba0994af5 in ?? () from /usr/lib/libevext.so
#21 0x00007f2ba03363c4 in start_thread () from /lib/libpthread.so.0
#22 0x00007f2b9fa1eefd in clone () from /lib/libc.so.6
#23 0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7f2ba1a2a6f0 (LWP 1279)):
#0  0x00007f2b9fa1f3d8 in epoll_wait () from /lib/libc.so.6
#1  0x00007f2ba0fc15c5 in epoll_dispatch (base=0x8be52c0,
tv=<optimized out>) at epoll.c:407
#2  0x00007f2ba0fafb26 in event_base_loop (base=0x8be52c0,
flags=<optimized out>) at event.c:1603
#3  0x000000000040735c in ETUNNEL_main (opt=0x61c010) at etunnel.c:508
#4  0x00007f2b9f97453d in __libc_start_main () from /lib/libc.so.6
#5  0x0000000000406d99 in _start ()
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to