hs: Retry rdv circuit if repurposed

This can happen if our measurement subsystem decides to snatch it.

Fixes #40696

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
David Goulet 2022-10-24 11:03:38 -04:00
parent 0a49e04691
commit a7aa22a4e7
2 changed files with 14 additions and 0 deletions

3
changes/ticket40696 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (onion service):
- Make the service retry a rendezvous if the circuit is being repurposed for
measurements. Fixes bug 40696; bugfix on 0.3.5.1-alpha.

View File

@ -1319,6 +1319,17 @@ hs_circ_cleanup_on_repurpose(circuit_t *circ)
if (circ->hs_token) {
hs_circuitmap_remove_circuit(circ);
}
switch (circ->purpose) {
case CIRCUIT_PURPOSE_S_CONNECT_REND:
/* This circuit was connecting to a rendezvous point but it is being
* repurposed so we need to relaunch an attempt else the client will be
* left hanging waiting for the rendezvous. */
hs_circ_retry_service_rendezvous_point(TO_ORIGIN_CIRCUIT(circ));
break;
default:
break;
}
}
/** Return true iff the given established client rendezvous circuit was sent