]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
relays shouldn't close idle rend circuits
authorRoger Dingledine <arma@torproject.org>
Sat, 9 Mar 2019 07:55:28 +0000 (02:55 -0500)
committerGeorge Kadianakis <desnacked@riseup.net>
Thu, 14 Mar 2019 10:53:33 +0000 (12:53 +0200)
Allow connections to single onion services to remain idle without being
disconnected.

Relays acting as rendezvous points for single onion services were
mistakenly closing idle established rendezvous circuits after 60 seconds,
thinking that they are unused directory-fetching circuits that had served
their purpose.

Fixes bug 29665; bugfix on 0.2.1.26.

changes/bug29665 [new file with mode: 0644]
src/or/circuituse.c

diff --git a/changes/bug29665 b/changes/bug29665
new file mode 100644 (file)
index 0000000..d89046f
--- /dev/null
@@ -0,0 +1,7 @@
+  o Minor bugfixes (single onion services):
+    - Allow connections to single onion services to remain idle without
+      being disconnected. Relays acting as rendezvous points for
+      single onion services were mistakenly closing idle established
+      rendezvous circuits after 60 seconds, thinking that they are unused
+      directory-fetching circuits that had served their purpose. Fixes
+      bug 29665; bugfix on 0.2.1.26.
index 96cd3cd7e8f360fb6f14f8654bbe8719f9f2f22e..7c0b60293df02555e96986db38dbe3aebf8e2bfc 100644 (file)
@@ -1381,10 +1381,13 @@ circuit_expire_old_circuits_serverside(time_t now)
     or_circ = TO_OR_CIRCUIT(circ);
     /* If the circuit has been idle for too long, and there are no streams
      * on it, and it ends here, and it used a create_fast, mark it for close.
+     *
+     * Also if there is a rend_splice on it, it's a single onion service
+     * circuit and we should not close it.
      */
     if (or_circ->is_first_hop && !circ->n_chan &&
         !or_circ->n_streams && !or_circ->resolving_streams &&
-        or_circ->p_chan &&
+        or_circ->p_chan && !or_circ->rend_splice &&
         channel_when_last_xmit(or_circ->p_chan) <= cutoff) {
       log_info(LD_CIRC, "Closing circ_id %u (empty %d secs ago)",
                (unsigned)or_circ->p_circ_id,