summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2017-08-24 09:12:57 -0400
committerDavid Goulet <dgoulet@torproject.org>2017-08-24 13:03:29 -0400
commita1125625449617ef427d8816f6e0174806e2d947 (patch)
tree694bbcb4e98cc07d0a8274faf537b1301514e76c /src
parent1077e9894cd60d9b991e38d965e57be00fd83277 (diff)
downloadtor-a1125625449617ef427d8816f6e0174806e2d947.tar.gz
tor-a1125625449617ef427d8816f6e0174806e2d947.zip
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@torproject.org>
Diffstat (limited to 'src')
-rw-r--r--src/or/hs_client.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/or/hs_client.c b/src/or/hs_client.c
index 3e25126a6a..c0e24ac85c 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,
safe_str_client(extend_info_describe(ei)));
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);