commit a52a32c855b2ed59cb915ad687d80f1294c6f0a3 Author: David Goulet dgoulet@torproject.org Date: Thu Aug 31 11:40:22 2017 -0400
hs: Set rendezvous circuit timestamp_dirty all the time
We used to check if it was set to 0 which is what unused circuit have but when the rendezvous circuit was cannibalized, the timestamp_dirty is not 0 but we still need to reset it so we can actually use it without having the chance of expiring the next second (or very soon).
Fixes #23123
Signed-off-by: David Goulet dgoulet@torproject.org --- src/or/hs_service.c | 7 ++++--- src/or/rendservice.c | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/or/hs_service.c b/src/or/hs_service.c index 5ff118222..d004bae23 100644 --- a/src/or/hs_service.c +++ b/src/or/hs_service.c @@ -2590,9 +2590,10 @@ service_rendezvous_circ_has_opened(origin_circuit_t *circ) tor_assert(circ->hs_ident); tor_assert(TO_CIRCUIT(circ)->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
- /* Declare the circuit dirty to avoid reuse, and for path-bias */ - if (!TO_CIRCUIT(circ)->timestamp_dirty) - TO_CIRCUIT(circ)->timestamp_dirty = time(NULL); + /* Declare the circuit dirty to avoid reuse, and for path-bias. We set the + * timestamp regardless of its content because that circuit could have been + * cannibalized so in any cases, we are about to use that circuit more. */ + TO_CIRCUIT(circ)->timestamp_dirty = time(NULL); pathbias_count_use_attempt(circ);
/* Get the corresponding service and intro point. */ diff --git a/src/or/rendservice.c b/src/or/rendservice.c index c17d77f97..9edb7cc4b 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -3332,9 +3332,10 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) NULL); rend_cookie = circuit->rend_data->rend_cookie;
- /* Declare the circuit dirty to avoid reuse, and for path-bias */ - if (!circuit->base_.timestamp_dirty) - circuit->base_.timestamp_dirty = time(NULL); + /* Declare the circuit dirty to avoid reuse, and for path-bias. We set the + * timestamp regardless of its content because that circuit could have been + * cannibalized so in any cases, we are about to use that circuit more. */ + circuit->base_.timestamp_dirty = time(NULL);
/* This may be redundant */ pathbias_count_use_attempt(circuit);