[tor-bugs] #29437 [Core Tor/Stem]: test-stem times out intermittently
Tor Bug Tracker & Wiki
blackhole at torproject.org
Thu Apr 4 15:15:45 UTC 2019
#29437: test-stem times out intermittently
-----------------------------------+-----------------------------------
Reporter: rl1987 | Owner: atagar
Type: defect | Status: needs_information
Priority: Medium | Milestone:
Component: Core Tor/Stem | Version:
Severity: Normal | Resolution:
Keywords: tor-ci-fail-sometimes | Actual Points: 0.2
Parent ID: | Points: 0.2
Reviewer: | Sponsor:
-----------------------------------+-----------------------------------
Comment (by nickm):
I've investigated this for a while; here's what I found.
I investigated the stall in `test.integ.client.connection`, which I see
with Python >= 3.6 but not Python <= 3.5. I used a hacked up version of
stem and a hacked up version of tor that logged a bunch of extra
information. I found that the buggy behavior, from Stem's point of view,
is that Tor accepted a VERSIONS cell but never replied.
From Tor's point of view, however, Stem negotiated a v1 link connection
with it, and so there is no such thing as a variable-length cell or a
VERSIONS cell.
Why does Tor think that stem negotiated a v1 link connection? It decides
this in `tor_tls_server_info_callback()`, when it first calls
`tor_tls_client_is_using_v2_ciphers()`. For some reason,
`SSL_get_client_ciphers()` returns null at this point, meaning "the client
has declared no ciphers" and convincing tor that the v1 link protocol is
in use. This result of scanning the ciphers is cached through subsequent
calls. If I remove the code in Tor that caches this result, then the stem
test passes, since later calls to `SSL_get_client_ciphers()` do in fact
return non-NULL.
Why does `SSL_get_client_ciphers()` return NULL for python3.6, but not
python3.5?
When Python 3.5 is in use, the session_secret_cb function is invoked
before the tor_tls_server_info_callback() function triggers cipher
classification, and at that point, the ciphers are set. When Python 3.6
is in use, the tor_tls_server_info_callback() function is hit twice early
on to hit cipher classification: once with the ciphers not set, and then
later with the ciphers set.
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/29437#comment:15>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
More information about the tor-bugs
mailing list