mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-20 02:09:24 +01:00
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.
This commit is contained in:
parent
e3ab27001f
commit
af8cadf3a9
8
changes/bug24898
Normal file
8
changes/bug24898
Normal file
@ -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.
|
||||
|
@ -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) {
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user