diff --git a/changes/bug11304 b/changes/bug11304 new file mode 100644 index 0000000000..2ea165f872 --- /dev/null +++ b/changes/bug11304 @@ -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. diff --git a/src/or/connection.c b/src/or/connection.c index 0c61b0d616..2e72e6b397 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -4023,6 +4023,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).",