[ 
https://issues.apache.org/jira/browse/KUDU-1901?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15886976#comment-15886976
 ] 

Todd Lipcon commented on KUDU-1901:
-----------------------------------

I re-built my local openssl with TSAN and it spat out a few bening-looking 
races, but also spat out the one that seems to be the issue:

{code}
WARNING: ThreadSanitizer: data race (pid=31048)
  Read of size 4 at 0x7d300000b958 by thread T11:
    #0 internal_verify /home/todd/git/openssl/crypto/x509/x509_vfy.c:1754 
(libcrypto.so.1.0.0+0x0000001bb729)
    #1 X509_verify_cert /home/todd/git/openssl/crypto/x509/x509_vfy.c:486 
(libcrypto.so.1.0.0+0x0000001be669)
    #2 ssl_add_cert_chain /home/todd/git/openssl/ssl/ssl_cert.c:1122 
(libssl.so.1.0.0+0x000000066496)
    #3 ssl3_output_cert_chain /home/todd/git/openssl/ssl/s3_both.c:327 
(libssl.so.1.0.0+0x000000038c3d)
    #4 ssl3_send_server_certificate /home/todd/git/openssl/ssl/s3_srvr.c:3333 
(libssl.so.1.0.0+0x000000020cf2)
    #5 ssl3_accept /home/todd/git/openssl/ssl/s3_srvr.c:428 
(libssl.so.1.0.0+0x00000002232f)
    #6 SSL_accept /home/todd/git/openssl/ssl/ssl_lib.c:990 
(libssl.so.1.0.0+0x000000063a9e)
    #7 ssl23_get_client_hello /home/todd/git/openssl/ssl/s23_srvr.c:647 
(libssl.so.1.0.0+0x00000003bbe3)
    #8 ssl23_accept /home/todd/git/openssl/ssl/s23_srvr.c:209 
(libssl.so.1.0.0+0x00000003ccb8)
    #9 SSL_do_handshake /home/todd/git/openssl/ssl/ssl_lib.c:2777 
(libssl.so.1.0.0+0x0000000618ca)
    #10 kudu::security::TlsHandshake::Continue(std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> > const&, 
std::__1::basic_string<char, std::__1::char_traits<char>, 
std::__1::allocator<char> >*) 
/home/todd/git/kudu/build/tsan/../../src/kudu/security/tls_handshake.cc:92:12 
(libsecurity.so+0x00000004d54f)
    #11 
kudu::security::TestTlsHandshakeBase::RunHandshake(kudu::security::TlsVerificationMode,
 kudu::security::TlsVerificationMode) 
/home/todd/git/kudu/build/tsan/../../src/kudu/security/tls_handshake-test.cc:112:27
 (tls_handshake-test+0x0000004d6dbc)
    #12 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1::operator()()
 const 
/home/todd/git/kudu/build/tsan/../../src/kudu/security/tls_handshake-test.cc:151:11
 (tls_handshake-test+0x0000004d598e)
    #13 
_ZNSt3__18__invokeIZN4kudu8security55TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test8TestBodyEvE3$_1JEEEDTclclsr3std3__1E7forwardIT_Efp_Espclsr3std3__1E7forwardIT0_Efp0_EEEOS5_DpOS6_
 
/home/todd/git/kudu/thirdparty/installed/tsan/include/c++/v1/type_traits:4287:1 
(tls_handshake-test+0x0000004d58eb)
    #14 void 
std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, 
std::__1::default_delete<std::__1::__thread_struct> >, 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct,
 std::__1::default_delete<std::__1::__thread_struct> >, 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1>&,
 std::__1::__tuple_indices<>) 
/home/todd/git/kudu/thirdparty/installed/tsan/include/c++/v1/thread:346 
(tls_handshake-test+0x0000004d58eb)
    #15 void* 
std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct,
 std::__1::default_delete<std::__1::__thread_struct> >, 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1>
 >(void*) 
/home/todd/git/kudu/thirdparty/installed/tsan/include/c++/v1/thread:356 
(tls_handshake-test+0x0000004d58eb)

  Previous write of size 4 at 0x7d300000b958 by thread T10:
    #0 internal_verify /home/todd/git/openssl/crypto/x509/x509_vfy.c:1776 
(libcrypto.so.1.0.0+0x0000001bb768)
    #1 X509_verify_cert /home/todd/git/openssl/crypto/x509/x509_vfy.c:486 
(libcrypto.so.1.0.0+0x0000001be669)
    #2 ssl_add_cert_chain /home/todd/git/openssl/ssl/ssl_cert.c:1122 
(libssl.so.1.0.0+0x000000066496)
    #3 ssl3_output_cert_chain /home/todd/git/openssl/ssl/s3_both.c:327 
(libssl.so.1.0.0+0x000000038c3d)
    #4 ssl3_send_server_certificate /home/todd/git/openssl/ssl/s3_srvr.c:3333 
(libssl.so.1.0.0+0x000000020cf2)
    #5 ssl3_accept /home/todd/git/openssl/ssl/s3_srvr.c:428 
(libssl.so.1.0.0+0x00000002232f)
    #6 SSL_accept /home/todd/git/openssl/ssl/ssl_lib.c:990 
(libssl.so.1.0.0+0x000000063a9e)
    #7 ssl23_get_client_hello /home/todd/git/openssl/ssl/s23_srvr.c:647 
(libssl.so.1.0.0+0x00000003bbe3)
    #8 ssl23_accept /home/todd/git/openssl/ssl/s23_srvr.c:209 
(libssl.so.1.0.0+0x00000003ccb8)
    #9 SSL_do_handshake /home/todd/git/openssl/ssl/ssl_lib.c:2777 
(libssl.so.1.0.0+0x0000000618ca)
    #10 kudu::security::TlsHandshake::Continue(std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> > const&, 
std::__1::basic_string<char, std::__1::char_traits<char>, 
std::__1::allocator<char> >*) 
/home/todd/git/kudu/build/tsan/../../src/kudu/security/tls_handshake.cc:92:12 
(libsecurity.so+0x00000004d54f)
    #11 
kudu::security::TestTlsHandshakeBase::RunHandshake(kudu::security::TlsVerificationMode,
 kudu::security::TlsVerificationMode) 
/home/todd/git/kudu/build/tsan/../../src/kudu/security/tls_handshake-test.cc:112:27
 (tls_handshake-test+0x0000004d6dbc)
    #12 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1::operator()()
 const 
/home/todd/git/kudu/build/tsan/../../src/kudu/security/tls_handshake-test.cc:151:11
 (tls_handshake-test+0x0000004d598e)
    #13 
_ZNSt3__18__invokeIZN4kudu8security55TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test8TestBodyEvE3$_1JEEEDTclclsr3std3__1E7forwardIT_Efp_Espclsr3std3__1E7forwardIT0_Efp0_EEEOS5_DpOS6_
 
/home/todd/git/kudu/thirdparty/installed/tsan/include/c++/v1/type_traits:4287:1 
(tls_handshake-test+0x0000004d58eb)
    #14 void 
std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, 
std::__1::default_delete<std::__1::__thread_struct> >, 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct,
 std::__1::default_delete<std::__1::__thread_struct> >, 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1>&,
 std::__1::__tuple_indices<>) 
/home/todd/git/kudu/thirdparty/installed/tsan/include/c++/v1/thread:346 
(tls_handshake-test+0x0000004d58eb)
    #15 void* 
std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct,
 std::__1::default_delete<std::__1::__thread_struct> >, 
kudu::security::TestTlsHandshakeConcurrent_TestConcurrentAdoptCert_Test::TestBody()::$_1>
 >(void*) 
/home/todd/git/kudu/thirdparty/installed/tsan/include/c++/v1/thread:356 
(tls_handshake-test+0x0000004d58eb)
{code}

> OpenSSL crashes if cert is adopted concurrently with a handshake
> ----------------------------------------------------------------
>
>                 Key: KUDU-1901
>                 URL: https://issues.apache.org/jira/browse/KUDU-1901
>             Project: Kudu
>          Issue Type: Bug
>          Components: security
>    Affects Versions: 1.3.0
>            Reporter: Todd Lipcon
>            Assignee: Todd Lipcon
>            Priority: Blocker
>
> We saw this in a test case and I was able to reproduce it. 
> https://github.com/openssl/openssl/issues/2165 indicates that it's a known 
> issue (or expected behavior) of OpenSSL.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to