[tor-commits] [tor/master] hs: Update intro circuit timestamp when re-extending

nickm at torproject.org nickm at torproject.org
Thu Aug 24 19:13:52 UTC 2017

commit a1125625449617ef427d8816f6e0174806e2d947
Author: David Goulet <dgoulet at torproject.org>
Date:   Thu Aug 24 09:12:57 2017 -0400

    hs: Update intro circuit timestamp when re-extending
    A client can re-extend up to 3 intro points on the same circuit. This happens
    when we get NACKed by the intro point for which we choose a new intro and
    re-extend the circuit to it.
    That process can be arbitrarly long so reset the dirty timestamp of the
    circuit everytime we choose to re-extend so we get a bit more time to actually
    do our introduction.
    This is a client circuit so it is short live once opened thus giving us a bit
    more time to complete the introduction is ok.
    Signed-off-by: David Goulet <dgoulet at torproject.org>
 src/or/hs_client.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/or/hs_client.c b/src/or/hs_client.c
index 3e25126a6..c0e24ac85 100644
--- a/src/or/hs_client.c
+++ b/src/or/hs_client.c
@@ -1195,6 +1195,13 @@ hs_client_reextend_intro_circuit(origin_circuit_t *circ)
              (unsigned int) TO_CIRCUIT(circ)->n_circ_id,
     ret = circuit_extend_to_new_exit(circ, ei);
+    if (ret == 0) {
+      /* We were able to extend so update the timestamp so we avoid expiring
+       * this circuit too early. The intro circuit is short live so the
+       * linkability issue is minimized, we just need the circuit to hold a
+       * bit longer so we can introduce. */
+      TO_CIRCUIT(circ)->timestamp_dirty = time(NULL);
+    }
   } else {
     log_info(LD_REND, "Closing intro circ %u (out of RELAY_EARLY cells).",
              (unsigned int) TO_CIRCUIT(circ)->n_circ_id);

More information about the tor-commits mailing list