From 387d1d8835df1bffa71e5157c41cb856c5f18d7d Mon Sep 17 00:00:00 2001
From: David Goulet <dgoulet@torproject.org>
Date: Mon, 1 Feb 2021 12:45:32 -0500
Subject: [PATCH] relay: Send back CONNECTION_REFUSED on reentry

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 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/core/or/connection_edge.c b/src/core/or/connection_edge.c
index da5431c47e..04005b29a6 100644
--- a/src/core/or/connection_edge.c
+++ b/src/core/or/connection_edge.c
@@ -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;
-- 
GitLab