classification
Title: test_ssl: test_msg_callback_deadlock_bpo43577() failed on macOS of GitHub Action
Type: Stage: resolved
Components: Tests Versions: Python 3.10
process
Status: closed Resolution: duplicate
Dependencies: Superseder: test_ssl: test_get_server_certificate() and test_msg_callback_deadlock_bpo43577() fail randomly on the macOS CI
View: 44229
Assigned To: Nosy List: christian.heimes, erlendaasland, vstinner
Priority: normal Keywords:

Created on 2021-04-15 12:49 by vstinner, last changed 2021-06-24 12:27 by erlendaasland. This issue is now closed.

Messages (3)
msg391131 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021-04-15 12:49
macOS of GitHub Action failed:
https://github.com/python/cpython/pull/25400/checks?check_run_id=2344085246

ERROR: test_msg_callback_deadlock_bpo43577 (test.test_ssl.TestSSLDebug)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/runner/work/cpython/cpython/Lib/test/test_ssl.py", line 4799, in test_msg_callback_deadlock_bpo43577
    s.connect((HOST, server.port))
  File "/Users/runner/work/cpython/cpython/Lib/ssl.py", line 1342, in connect
    self._real_connect(addr, False)
  File "/Users/runner/work/cpython/cpython/Lib/ssl.py", line 1329, in _real_connect
    super().connect(addr)
ConnectionRefusedError: [Errno 61] Connection refused


Test code:

    def test_msg_callback_deadlock_bpo43577(self):
        client_context, server_context, hostname = testing_context()
        server_context2 = testing_context()[1]

        def msg_cb(conn, direction, version, content_type, msg_type, data):
            pass

        def sni_cb(sock, servername, ctx):
            sock.context = server_context2

        server_context._msg_callback = msg_cb
        server_context.sni_callback = sni_cb

        server = ThreadedEchoServer(context=server_context, chatty=False)
        with server:
            with client_context.wrap_socket(socket.socket(),
                                            server_hostname=hostname) as s:
                s.connect((HOST, server.port))
            with client_context.wrap_socket(socket.socket(),
                                            server_hostname=hostname) as s:
                s.connect((HOST, server.port))  # <===== FAIL HERE ====


test.pythoninfo:

ssl.HAS_SNI: True
ssl.OPENSSL_VERSION: OpenSSL 1.1.1k  25 Mar 2021
ssl.OPENSSL_VERSION_INFO: (1, 1, 1, 11, 15)
ssl.OP_ALL: 0x80000054
ssl.OP_NO_TLSv1_1: 0x10000000
ssl.SSLContext.maximum_version: MAXIMUM_SUPPORTED
ssl.SSLContext.minimum_version: MINIMUM_SUPPORTED
ssl.SSLContext.options: OP_NO_COMPRESSION|OP_ENABLE_MIDDLEBOX_COMPAT|OP_CIPHER_SERVER_PREFERENCE|OP_NO_SSLv3|0x80000054
ssl.SSLContext.protocol: PROTOCOL_TLS
ssl.SSLContext.verify_mode: CERT_NONE
ssl.default_https_context.maximum_version: MAXIMUM_SUPPORTED
ssl.default_https_context.minimum_version: MINIMUM_SUPPORTED
ssl.default_https_context.options: OP_NO_COMPRESSION|OP_ENABLE_MIDDLEBOX_COMPAT|OP_CIPHER_SERVER_PREFERENCE|OP_NO_SSLv3|0x80000054
ssl.default_https_context.protocol: PROTOCOL_TLS
ssl.default_https_context.verify_mode: CERT_REQUIRED
ssl.stdlib_context.maximum_version: MAXIMUM_SUPPORTED
ssl.stdlib_context.minimum_version: MINIMUM_SUPPORTED
ssl.stdlib_context.options: OP_NO_COMPRESSION|OP_ENABLE_MIDDLEBOX_COMPAT|OP_CIPHER_SERVER_PREFERENCE|OP_NO_SSLv3|0x80000054
ssl.stdlib_context.protocol: PROTOCOL_TLS
ssl.stdlib_context.verify_mode: CERT_NONE


The test was added recently:

commit 77cde5042a2f1eae489c11a67540afaf43cd5cdf
Author: Christian Heimes <christian@python.org>
Date:   Sun Mar 21 16:13:09 2021 +0100

    bpo-43577: Fix deadlock with SSLContext._msg_callback and sni_callback (GH-24957)
    
    OpenSSL copies the internal message callback from SSL_CTX->msg_callback to
    SSL->msg_callback. SSL_set_SSL_CTX() does not update SSL->msg_callback
    to use the callback value of the new context.
    
    PySSL_set_context() now resets the callback and _PySSL_msg_callback()
    resets thread state in error path.
    
    Signed-off-by: Christian Heimes <christian@python.org>
msg394753 - (view) Author: Erlend E. Aasland (erlendaasland) * (Python triager) Date: 2021-05-30 06:40
See also bpo-44229
msg396480 - (view) Author: Erlend E. Aasland (erlendaasland) * (Python triager) Date: 2021-06-24 12:27
Closing as a duplicate of bpo-44229. Please revert if you disagree.
History
Date User Action Args
2021-06-24 12:27:43erlendaaslandsetstatus: open -> closed
superseder: test_ssl: test_get_server_certificate() and test_msg_callback_deadlock_bpo43577() fail randomly on the macOS CI
messages: + msg396480

resolution: duplicate
stage: resolved
2021-05-30 06:40:28erlendaaslandsetnosy: + erlendaasland
messages: + msg394753
2021-04-15 12:49:57vstinnercreate