tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit e0f7a2dbd4365d453131732a668c1544962fcc0b
parent 65a6103afc39890f41f6f5e7ba7e4ef570af1622
Author: Nick Mathewson <nickm@torproject.org>
Date:   Mon, 20 Nov 2017 08:39:34 -0500

Merge branch 'bug23681_029_01_squashed' into maint-0.3.2

Diffstat:
Achanges/bug23681 | 5+++++
Msrc/or/circuituse.c | 18++++++++----------
2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/changes/bug23681 b/changes/bug23681 @@ -0,0 +1,5 @@ + o Minor bugfixes (hidden service client): + - The introduction circuit was being timed out too quickly while waiting + for the rendezvous circuit to complete. Keep the intro circuit around + longer instead of timing out and reopening new ones constantly. Fixes + bug 23681; bugfix on 0.2.4.8-alpha. diff --git a/src/or/circuituse.c b/src/or/circuituse.c @@ -543,8 +543,7 @@ circuit_expire_building(void) cutoff = begindir_cutoff; else if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) cutoff = close_cutoff; - else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING || - victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) + else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) cutoff = c_intro_cutoff; else if (victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) cutoff = s_intro_cutoff; @@ -661,12 +660,13 @@ circuit_expire_building(void) TO_ORIGIN_CIRCUIT(victim)->path_state = PATH_STATE_USE_FAILED; break; case CIRCUIT_PURPOSE_C_INTRODUCING: - /* We keep old introducing circuits around for - * a while in parallel, and they can end up "opened". - * We decide below if we're going to mark them timed - * out and eventually close them. - */ - break; + /* That purpose means that the intro point circuit has been opened + * succesfully but the INTRODUCE1 cell hasn't been sent yet because + * the client is waiting for the rendezvous point circuit to open. + * Keep this circuit open while waiting for the rendezvous circuit. + * We let the circuit idle timeout take care of cleaning this + * circuit if it never used. */ + continue; case CIRCUIT_PURPOSE_C_ESTABLISH_REND: case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED: case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT: @@ -757,8 +757,6 @@ circuit_expire_building(void) NULL) break; /* fallthrough! */ - case CIRCUIT_PURPOSE_C_INTRODUCING: - /* connection_ap_handshake_attach_circuit() will relaunch for us */ case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT: case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED: /* If we have reached this line, we want to spare the circ for now. */