From: David Goulet Date: Thu, 24 Aug 2017 13:12:57 +0000 (-0400) Subject: hs: Update intro circuit timestamp when re-extending X-Git-Tag: tor-0.3.2.1-alpha~146^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a1125625449617ef427d8816f6e0174806e2d947;p=thirdparty%2Ftor.git 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 --- 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);