[tor-commits] [tor/maint-0.2.2] Discard all cells on a marked connection

nickm at torproject.org nickm at torproject.org
Fri Oct 28 21:58:30 UTC 2011


commit cf8bffa35901a26ae840dcd715dd2f664259efb3
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Oct 28 17:04:15 2011 -0400

    Discard all cells on a marked connection
    
    Fix for bug 4299
---
 changes/bug4299  |    5 +++++
 src/or/command.c |    6 ++++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/changes/bug4299 b/changes/bug4299
new file mode 100644
index 0000000..c43d814
--- /dev/null
+++ b/changes/bug4299
@@ -0,0 +1,5 @@
+  o Major bugfix:
+    - Do not process cells on a marked-for-close connection. We previously
+      avoided this by not calling read handlers on marked connections, but
+      that's not adequate for the case when cells are very small. Fixes
+      bug 4299; bugfix on 0.2.0.20-rc which first made small cells possible.
diff --git a/src/or/command.c b/src/or/command.c
index 1fa8bc6..5271a7a 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -132,6 +132,9 @@ command_process_cell(cell_t *cell, or_connection_t *conn)
 #define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn)
 #endif
 
+  if (conn->_base.marked_for_close)
+    return;
+
   /* Reject all but VERSIONS and NETINFO when handshaking. */
   if (handshaking && cell->command != CELL_VERSIONS &&
       cell->command != CELL_NETINFO)
@@ -205,6 +208,9 @@ command_process_var_cell(var_cell_t *cell, or_connection_t *conn)
   }
 #endif
 
+  if (conn->_base.marked_for_close)
+    return;
+
   /* reject all when not handshaking. */
   if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING)
     return;



More information about the tor-commits mailing list