]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
relay: Send back CONNECTION_REFUSED on reentry
authorDavid Goulet <dgoulet@torproject.org>
Mon, 1 Feb 2021 17:45:32 +0000 (12:45 -0500)
committerDavid Goulet <dgoulet@torproject.org>
Mon, 1 Feb 2021 17:45:32 +0000 (12:45 -0500)
The TORPROTOCOL reason causes the client to close the circuit which is not
what we want because other valid streams might be on it.

Instead, CONNECTION_REFUSED will leave it open but will not allow more streams
to be attached to it. The client then open a new circuit to the destination.

Closes #40270

Signed-off-by: David Goulet <dgoulet@torproject.org>
src/core/or/connection_edge.c

index da5431c47e1dae4e18c0a4f873e71aff8db47317..04005b29a6f6467dd0d065ac7e9ad6427da7c0b9 100644 (file)
@@ -4293,7 +4293,7 @@ connection_exit_connect(edge_connection_t *edge_conn)
       nodelist_reentry_probably_contains(&conn->addr, conn->port)) {
     log_info(LD_EXIT, "%s tried to connect back to a known relay address. "
                       "Closing.", connection_describe(conn));
-    connection_edge_end(edge_conn, END_STREAM_REASON_TORPROTOCOL);
+    connection_edge_end(edge_conn, END_STREAM_REASON_CONNECTREFUSED);
     circuit_detach_stream(circuit_get_by_edge_conn(edge_conn), edge_conn);
     connection_free(conn);
     return;