diff options
author | Nick Mathewson <nickm@torproject.org> | 2014-02-09 21:35:14 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2014-02-09 21:35:14 -0500 |
commit | b15f75b63266742aa6aa358c553799a31f0b350e (patch) | |
tree | ea2f6ab38badf9c226075d4f51636d81d80106c9 | |
parent | 9bb34aa897e4ecac27a6f8d50a659803f73c6cb9 (diff) | |
download | tor-b15f75b63266742aa6aa358c553799a31f0b350e.tar tor-b15f75b63266742aa6aa358c553799a31f0b350e.tar.gz |
Don't treat END_STREAM_REASON_INTERNAL as total circuit failure
It can happen because we sent something that got an ENETUNREACH
response.
Bugfix on 0.2.4.8-alpha; fixes a part of bug 10777.
-rw-r--r-- | changes/bug10777_internal_024 | 4 | ||||
-rw-r--r-- | src/or/relay.c | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/changes/bug10777_internal_024 b/changes/bug10777_internal_024 new file mode 100644 index 000000000..4544147f6 --- /dev/null +++ b/changes/bug10777_internal_024 @@ -0,0 +1,4 @@ + o Major bugfixes: + - Do not treat END_STREAM_REASON_INTERNAL as indicating a definite + circuit failure, since it could also indicate an ENETUNREACH + error. Fixes part of bug 10777; bugfix on 0.2.4.8-alpha. diff --git a/src/or/relay.c b/src/or/relay.c index 63119cbf0..57633f86a 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -731,13 +731,15 @@ connection_ap_process_end_not_open( if (rh->length > 0) { if (reason == END_STREAM_REASON_TORPROTOCOL || - reason == END_STREAM_REASON_INTERNAL || reason == END_STREAM_REASON_DESTROY) { - /* All three of these reasons could mean a failed tag + /* Both of these reasons could mean a failed tag * hit the exit and it complained. Do not probe. * Fail the circuit. */ circ->path_state = PATH_STATE_USE_FAILED; return -END_CIRC_REASON_TORPROTOCOL; + } else if (reason == END_STREAM_REASON_INTERNAL) { + /* We can't infer success or failure, since older Tors report + * ENETUNREACH as END_STREAM_REASON_INTERNAL. */ } else { /* Path bias: If we get a valid reason code from the exit, * it wasn't due to tagging. |