diff options
author | Mike Perry <mikeperry-git@torproject.org> | 2019-06-05 11:50:44 -0700 |
---|---|---|
committer | Mike Perry <mikeperry-git@torproject.org> | 2019-06-05 11:50:44 -0700 |
commit | c525135dac354892a45ad3d2f6de9450d393f09f (patch) | |
tree | 652fdf4a18796051709406c2762209437f0dc8fd /src/core | |
parent | 31c34f6524fecd6a104a8dac04d9330b5323e3c0 (diff) | |
download | tor-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.
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/or/circuituse.c | 6 |
1 files changed, 6 insertions, 0 deletions
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; |