summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-01-23 14:08:47 -0500
committerNick Mathewson <nickm@torproject.org>2018-01-23 14:08:47 -0500
commit6f4ee6e5e78112f78687fa0617e2cdeb2899f7d6 (patch)
treebf8f6d593863cdeba3d9251e09caa489af5065c4
parent58f4aee90b753aaa4bca51fd5ffe488fddbef577 (diff)
parentdb5b670d85febc6e3011932f8f0c7d383d4b9bea (diff)
downloadtor-6f4ee6e5e78112f78687fa0617e2cdeb2899f7d6.tar.gz
tor-6f4ee6e5e78112f78687fa0617e2cdeb2899f7d6.zip
Merge remote-tracking branch 'mikeperry/bug24946'
-rw-r--r--changes/bug249465
-rw-r--r--src/or/circuituse.c2
-rw-r--r--src/or/connection_edge.c3
-rw-r--r--src/or/hs_circuit.c6
-rw-r--r--src/or/rendservice.c7
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);