[tor-commits] [tor/master] Remove false positives from channel_is_client()

nickm at torproject.org nickm at torproject.org
Wed Jan 17 16:15:21 UTC 2018


commit af8cadf3a9febe3dbe22899b828f9f7946a82cef
Author: Roger Dingledine <arma at torproject.org>
Date:   Mon Jan 15 22:33:40 2018 -0500

    Remove false positives from channel_is_client()
    
    Fix a set of false positives where relays would consider connections
    to other relays as being client-only connections (and thus e.g.
    deserving different link padding schemes) if those relays fell out
    of the consensus briefly.
    
    Now we look only at the initial handshake and whether the connection
    authenticated as a relay.
    
    Fixes bug 24898; bugfix on 0.3.1.1-alpha.
---
 changes/bug24898       | 8 ++++++++
 src/or/command.c       | 6 ------
 src/or/connection_or.c | 6 ++++++
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/changes/bug24898 b/changes/bug24898
new file mode 100644
index 000000000..f64340d71
--- /dev/null
+++ b/changes/bug24898
@@ -0,0 +1,8 @@
+  o Major bugfixes (relays):
+    - Fix a set of false positives where relays would consider connections
+      to other relays as being client-only connections (and thus e.g.
+      deserving different link padding schemes) if those relays fell out
+      of the consensus briefly. Now we look only at the initial handshake
+      and whether the connection authenticated as a relay. Fixes bug
+      24898; bugfix on 0.3.1.1-alpha.
+
diff --git a/src/or/command.c b/src/or/command.c
index c667cbbe5..894483e00 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -328,12 +328,6 @@ command_process_create_cell(cell_t *cell, channel_t *chan)
 
   if (connection_or_digest_is_known_relay(chan->identity_digest)) {
     rep_hist_note_circuit_handshake_requested(create_cell->handshake_type);
-    // Needed for chutney: Sometimes relays aren't in the consensus yet, and
-    // get marked as clients. This resets their channels once they appear.
-    // Probably useful for normal operation wrt relay flapping, too.
-    chan->is_client = 0;
-  } else {
-    channel_mark_client(chan);
   }
 
   if (create_cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST) {
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 59a9bdffd..fcd281da2 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -1952,6 +1952,12 @@ connection_or_set_state_open(or_connection_t *conn)
   connection_or_change_state(conn, OR_CONN_STATE_OPEN);
   control_event_or_conn_status(conn, OR_CONN_EVENT_CONNECTED, 0);
 
+  /* Link protocol 3 appeared in Tor 0.2.3.6-alpha, so any connection
+   * that uses an earlier link protocol should not be treated as a relay. */
+  if (conn->link_proto < 3) {
+    channel_mark_client(TLS_CHAN_TO_BASE(conn->chan));
+  }
+
   or_handshake_state_free(conn->handshake_state);
   conn->handshake_state = NULL;
   connection_start_reading(TO_CONN(conn));





More information about the tor-commits mailing list