]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Remove false positives from channel_is_client()
authorRoger Dingledine <arma@torproject.org>
Tue, 16 Jan 2018 03:33:40 +0000 (22:33 -0500)
committerRoger Dingledine <arma@torproject.org>
Tue, 16 Jan 2018 03:33:40 +0000 (22:33 -0500)
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 [new file with mode: 0644]
src/or/command.c
src/or/connection_or.c

diff --git a/changes/bug24898 b/changes/bug24898
new file mode 100644 (file)
index 0000000..f64340d
--- /dev/null
@@ -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.
+
index c667cbbe52f5167e47e38871b68a4eb38938f76f..894483e0013959f7c07bf56a6a29a53f68000d16 100644 (file)
@@ -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) {
index 59a9bdffda76c7c2f4069f250b1b89cc2c9302b5..fcd281da2605b92f1f854d906160083cc2b3683d 100644 (file)
@@ -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));