diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-01-23 14:08:47 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-01-23 14:08:47 -0500 |
commit | 6f4ee6e5e78112f78687fa0617e2cdeb2899f7d6 (patch) | |
tree | bf8f6d593863cdeba3d9251e09caa489af5065c4 | |
parent | 58f4aee90b753aaa4bca51fd5ffe488fddbef577 (diff) | |
parent | db5b670d85febc6e3011932f8f0c7d383d4b9bea (diff) | |
download | tor-6f4ee6e5e78112f78687fa0617e2cdeb2899f7d6.tar.gz tor-6f4ee6e5e78112f78687fa0617e2cdeb2899f7d6.zip |
Merge remote-tracking branch 'mikeperry/bug24946'
-rw-r--r-- | changes/bug24946 | 5 | ||||
-rw-r--r-- | src/or/circuituse.c | 2 | ||||
-rw-r--r-- | src/or/connection_edge.c | 3 | ||||
-rw-r--r-- | src/or/hs_circuit.c | 6 | ||||
-rw-r--r-- | src/or/rendservice.c | 7 |
5 files changed, 21 insertions, 2 deletions
diff --git a/changes/bug24946 b/changes/bug24946 new file mode 100644 index 0000000000..7f8acfe5d0 --- /dev/null +++ b/changes/bug24946 @@ -0,0 +1,5 @@ + o Minor bugfixes (hidden services): + - Fix a warning caused by differentiating hsdir circuits from general + circuits. Also address three similar checks in the codebase that + were related to reuse and rate limiting of circuits. Fixes bug 24946; + bugfix on 0.3.3.0-alpha-dev; not in any released version of tor. diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 2599685964..1ff1de4650 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -135,6 +135,8 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ, } if (purpose == CIRCUIT_PURPOSE_C_GENERAL || + purpose == CIRCUIT_PURPOSE_C_HSDIR_GET || + purpose == CIRCUIT_PURPOSE_S_HSDIR_POST || purpose == CIRCUIT_PURPOSE_HS_VANGUARDS || purpose == CIRCUIT_PURPOSE_C_REND_JOINED) { if (circ->timestamp_dirty && diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 4021ca9e0c..a47f044e08 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -792,7 +792,10 @@ connection_ap_expire_beginning(void) } continue; } + if (circ->purpose != CIRCUIT_PURPOSE_C_GENERAL && + circ->purpose != CIRCUIT_PURPOSE_C_HSDIR_GET && + circ->purpose != CIRCUIT_PURPOSE_S_HSDIR_POST && circ->purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT && circ->purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING) { log_warn(LD_BUG, "circuit->purpose == CIRCUIT_PURPOSE_C_GENERAL failed. " diff --git a/src/or/hs_circuit.c b/src/or/hs_circuit.c index 753c0fcd6a..2a41c1cccf 100644 --- a/src/or/hs_circuit.c +++ b/src/or/hs_circuit.c @@ -824,7 +824,11 @@ hs_circ_service_intro_has_opened(hs_service_t *service, /* Cleaning up the hidden service identifier and repurpose. */ hs_ident_circuit_free(circ->hs_ident); circ->hs_ident = NULL; - circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_GENERAL); + if (circuit_should_use_vanguards(TO_CIRCUIT(circ)->purpose)) + circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_HS_VANGUARDS); + else + circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_GENERAL); + /* Inform that this circuit just opened for this new purpose. */ circuit_has_opened(circ); /* This return value indicate to the caller that the IP object should be diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 52bd6683fd..f38895d5f1 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -3222,7 +3222,12 @@ rend_service_intro_has_opened(origin_circuit_t *circuit) "circuit, but we already have enough. Redefining purpose to " "general; leaving as internal."); - circuit_change_purpose(TO_CIRCUIT(circuit), CIRCUIT_PURPOSE_C_GENERAL); + if (circuit_should_use_vanguards(TO_CIRCUIT(circuit)->purpose)) { + circuit_change_purpose(TO_CIRCUIT(circuit), + CIRCUIT_PURPOSE_HS_VANGUARDS); + } else { + circuit_change_purpose(TO_CIRCUIT(circuit), CIRCUIT_PURPOSE_C_GENERAL); + } { rend_data_free(circuit->rend_data); |