summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2008-06-11 02:04:59 +0000
committerRoger Dingledine <arma@torproject.org>2008-06-11 02:04:59 +0000
commit01aa4f95acd157ae6c4cccec531c63653bc2dc10 (patch)
tree21a13842599388c5a0e92c84cca20f1a77dccd39
parent953b7751553da82c3cfab0245bb9397b26c39d1f (diff)
downloadtor-01aa4f95acd157ae6c4cccec531c63653bc2dc10.tar.gz
tor-01aa4f95acd157ae6c4cccec531c63653bc2dc10.zip
Fix a bug where, when we were choosing the 'end stream reason' to
put in our relay end cell that we send to the exit relay, Tor clients on Windows were sometimes sending the wrong 'reason'. The anonymity problem is that exit relays may be able to guess whether client is running Windows, thus helping partition the anonymity set. Down the road we should stop sending reasons to exit relays, or otherwise prevent future versions of this bug. svn:r15118
-rw-r--r--ChangeLog9
-rw-r--r--src/or/connection.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 43b12eb6f0..60d649213e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,13 @@
Changes in version 0.2.0.28-rc - 2008-06-??
+ o Anonymity fixes:
+ - Fix a bug where, when we were choosing the 'end stream reason' to
+ put in our relay end cell that we send to the exit relay, Tor
+ clients on Windows were sometimes sending the wrong 'reason'. The
+ anonymity problem is that exit relays may be able to guess whether
+ client is running Windows, thus helping partition the anonymity
+ set. Down the road we should stop sending reasons to exit relays,
+ or otherwise prevent future versions of this bug.
+
o Minor fixes:
- Bridge relays no longer print "xx=0" in their extrainfo document
for every single country code in the geoip db.
diff --git a/src/or/connection.c b/src/or/connection.c
index f150727b92..8c7b6a5dd8 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -1842,13 +1842,13 @@ loop_again:
before = buf_datalen(conn->inbuf);
if (connection_read_to_buf(conn, &max_to_read) < 0) {
/* There's a read error; kill the connection.*/
- connection_close_immediate(conn); /* Don't flush; connection is dead. */
if (CONN_IS_EDGE(conn)) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
connection_edge_end_errno(edge_conn);
if (edge_conn->socks_request) /* broken, don't send a socks reply back */
edge_conn->socks_request->has_finished = 1;
}
+ connection_close_immediate(conn); /* Don't flush; connection is dead. */
connection_mark_for_close(conn);
return -1;
}