[tor-commits] [stegotorus/master] Fix that race condition in connection setup again. This time for sure!

zwol at torproject.org zwol at torproject.org
Fri Jul 20 23:17:08 UTC 2012


commit e0ade2128ee7b21cede4b2477b5f00f0f2f8d51c
Author: Zack Weinberg <zackw at cmu.edu>
Date:   Wed Jun 13 15:06:13 2012 -0400

    Fix that race condition in connection setup again.  This time for sure!
---
 src/protocol/chop.cc |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/src/protocol/chop.cc b/src/protocol/chop.cc
index 67ed2b3..20ba563 100644
--- a/src/protocol/chop.cc
+++ b/src/protocol/chop.cc
@@ -903,11 +903,22 @@ chop_circuit_t::pick_connection(size_t desired, size_t *blocksize)
   for (unordered_set<chop_conn_t *>::iterator i = downstreams.begin();
        i != downstreams.end(); i++) {
     chop_conn_t *conn = *i;
+
+    // We cannot transmit on a connection whose steganography module has
+    // not yet been instantiated.  (This only ever happens server-side.)
     if (!conn->steg) {
       log_debug(conn, "offers 0 bytes (no steg)");
       continue;
     }
 
+    // We must not transmit on a connection that has not completed its
+    // TCP handshake.  (This only ever happens client-side.  If we try
+    // it anyway, the transmission gets silently dropped on the floor.)
+    if (!conn->connected) {
+      log_debug(conn, "offers 0 bytes (not connected)");
+      continue;
+    }
+
     size_t shake = conn->sent_handshake ? 0 : HANDSHAKE_LEN;
     size_t room = conn->steg->transmit_room(desired + shake, lo + shake,
                                             MAX_BLOCK_SIZE + shake);





More information about the tor-commits mailing list