mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 06:48:05 +01:00
Fix handling of ISO_STREAM
Now we track *which* stream with ISO_STREAM set is associated to a particular circuit, so that we won't think that stream is incompatible with its circuit and launch another one a second later, and we use that same field to mark circuits which have had an ISO_STREAM stream attached to them, so that we won't ever put a second stream on that circuit. Fixes bug 3695.
This commit is contained in:
parent
52421e9101
commit
cab3641638
2 changed files with 9 additions and 3 deletions
|
@ -3432,9 +3432,9 @@ connection_edge_compatible_with_circuit(const edge_connection_t *conn,
|
|||
tor_strdup(conn->socks_request->address);
|
||||
}
|
||||
|
||||
/* If isolation_values_set, then the circuit is not compatible with
|
||||
* any new ISO_STREAM stream. */
|
||||
if (iso & ISO_STREAM)
|
||||
if ((iso & ISO_STREAM) &&
|
||||
(circ->associated_isolated_stream_global_id !=
|
||||
TO_CONN(conn)->global_identifier))
|
||||
return 0;
|
||||
|
||||
if ((iso & ISO_DESTPORT) && conn->socks_request->port != circ->dest_port)
|
||||
|
@ -3487,6 +3487,8 @@ connection_edge_update_circuit_isolation(const edge_connection_t *conn,
|
|||
if (!circ->isolation_values_set) {
|
||||
if (dry_run)
|
||||
return -1;
|
||||
circ->associated_isolated_stream_global_id =
|
||||
TO_CONN(conn)->global_identifier;
|
||||
circ->dest_port = conn->socks_request->port;
|
||||
circ->dest_address = tor_strdup(conn->original_dest_address);
|
||||
circ->client_proto_type = conn->socks_request->listener_type;
|
||||
|
@ -3562,6 +3564,7 @@ circuit_clear_isolation(origin_circuit_t *circ)
|
|||
|
||||
circ->isolation_values_set = 0;
|
||||
circ->isolation_flags_mixed = 0;
|
||||
circ->associated_isolated_stream_global_id = 0;
|
||||
circ->client_proto_type = 0;
|
||||
circ->client_proto_socksver = 0;
|
||||
circ->dest_port = 0;
|
||||
|
|
|
@ -2530,6 +2530,9 @@ typedef struct origin_circuit_t {
|
|||
socks_username_len and socks_password_len for their lengths. */
|
||||
char *socks_username;
|
||||
char *socks_password;
|
||||
/** Global identifier for the first stream attached here; used by
|
||||
* ISO_STREAM. */
|
||||
uint64_t associated_isolated_stream_global_id;
|
||||
/**@}*/
|
||||
|
||||
} origin_circuit_t;
|
||||
|
|
Loading…
Add table
Reference in a new issue