summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2019-06-05 11:50:44 -0700
committerMike Perry <mikeperry-git@torproject.org>2019-06-05 11:50:44 -0700
commitc525135dac354892a45ad3d2f6de9450d393f09f (patch)
tree652fdf4a18796051709406c2762209437f0dc8fd
parent31c34f6524fecd6a104a8dac04d9330b5323e3c0 (diff)
downloadtor-c525135dac354892a45ad3d2f6de9450d393f09f.tar.gz
tor-c525135dac354892a45ad3d2f6de9450d393f09f.zip
Bug 29034: Cleanup hs circuitmap when purpose changes.
Leave the other rend and hs_ident data around until circuit free, since code may still try to inspect it after marking the circuit for close. The circuitmap is the important thing to clean up, since repurposed intropoints must be removed from this map to ensure validity.
-rw-r--r--changes/bug290345
-rw-r--r--src/core/or/circuituse.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/changes/bug29034 b/changes/bug29034
new file mode 100644
index 0000000000..e7aa9af00b
--- /dev/null
+++ b/changes/bug29034
@@ -0,0 +1,5 @@
+ o Major bugfixes (Onion service reachability):
+ - Properly clean up the introduction point map when circuits change purpose
+ from onion service circuits to pathbias, measurement, or other circuit types.
+ This should fix some service-side instances of introduction point failure.
+ Fixes bug 29034; bugfix on 0.3.2.1-alpha.
diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c
index 485c389054..18b419e99d 100644
--- a/src/core/or/circuituse.c
+++ b/src/core/or/circuituse.c
@@ -3082,6 +3082,12 @@ circuit_change_purpose(circuit_t *circ, uint8_t new_purpose)
circ->purpose,
circuit_purpose_to_string(new_purpose),
new_purpose);
+
+ /* Take specific actions if we are repurposing a hidden service circuit. */
+ if (circuit_purpose_is_hidden_service(circ->purpose) &&
+ !circuit_purpose_is_hidden_service(new_purpose)) {
+ hs_circ_cleanup(circ);
+ }
}
old_purpose = circ->purpose;