Call connection_or_close_for_error() properly if write_to_buf() ever fails on an orconn

This commit is contained in:
Andrea Shepard 2014-04-15 21:25:49 -07:00
parent 125c8e5468
commit 6ee9138576
2 changed files with 11 additions and 0 deletions

5
changes/bug11304 Normal file
View File

@ -0,0 +1,5 @@
o Bugfixes:
- If write_to_buf() in connection_write_to_buf_impl_() ever fails,
check if it's an or_connection_t and correctly call
connection_or_close_for_error() rather than connection_mark_for_close()
directly. Fixes bug #11304.

View File

@ -4009,6 +4009,12 @@ connection_write_to_buf_impl_,(const char *string, size_t len,
"write_to_buf failed. Closing circuit (fd %d).", (int)conn->s);
circuit_mark_for_close(circuit_get_by_edge_conn(TO_EDGE_CONN(conn)),
END_CIRC_REASON_INTERNAL);
} else if (conn->type == CONN_TYPE_OR) {
or_connection_t *orconn = TO_OR_CONN(conn);
log_warn(LD_NET,
"write_to_buf failed on an orconn; notifying of error "
"(fd %d)", (int)(conn->s));
connection_or_close_for_error(orconn, 0);
} else {
log_warn(LD_NET,
"write_to_buf failed. Closing connection (fd %d).",