]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
hs: Retry rdv circuit if repurposed
authorDavid Goulet <dgoulet@torproject.org>
Mon, 24 Oct 2022 15:03:38 +0000 (11:03 -0400)
committerDavid Goulet <dgoulet@torproject.org>
Wed, 26 Oct 2022 19:05:44 +0000 (15:05 -0400)
This can happen if our measurement subsystem decides to snatch it.

Fixes #40696

Signed-off-by: David Goulet <dgoulet@torproject.org>
changes/ticket40696 [new file with mode: 0644]
src/feature/hs/hs_circuit.c

diff --git a/changes/ticket40696 b/changes/ticket40696
new file mode 100644 (file)
index 0000000..a2c09f6
--- /dev/null
@@ -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.
index d253802f792e8898badcb6b09af15168499ccfa4..edb5e692e7657a57e45aff8dc60feab1bbce7300 100644 (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