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.
This commit is contained in:
Nick Mathewson 2014-02-09 21:35:14 -05:00
parent 9bb34aa897
commit b15f75b632
2 changed files with 8 additions and 2 deletions

View File

@ -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.

View File

@ -731,13 +731,15 @@ connection_ap_process_end_not_open(
if (rh->length > 0) { if (rh->length > 0) {
if (reason == END_STREAM_REASON_TORPROTOCOL || if (reason == END_STREAM_REASON_TORPROTOCOL ||
reason == END_STREAM_REASON_INTERNAL ||
reason == END_STREAM_REASON_DESTROY) { 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. * hit the exit and it complained. Do not probe.
* Fail the circuit. */ * Fail the circuit. */
circ->path_state = PATH_STATE_USE_FAILED; circ->path_state = PATH_STATE_USE_FAILED;
return -END_CIRC_REASON_TORPROTOCOL; 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 { } else {
/* Path bias: If we get a valid reason code from the exit, /* Path bias: If we get a valid reason code from the exit,
* it wasn't due to tagging. * it wasn't due to tagging.