[tor-commits] [tor/master] Treat SW_SERVER_HELLO_B as another sign of an SSL handshake

nickm at torproject.org nickm at torproject.org
Mon Jun 11 14:39:32 UTC 2012


commit e3243ad5f6a2c6acfd671e2cab22c4b6a4c21f47
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue May 15 11:13:49 2012 -0400

    Treat SW_SERVER_HELLO_B as another sign of an SSL handshake
    
    We've been only treating SW_SERVER_HELLO_A as meaning that an SSL
    handshake was happening.  But that's not right: if the initial
    attempt to write a ServerHello fails, we would get a callback in
    state SW_SERVER_HELLO_B instead.
    
    (That's "instead" and not "in addition": any failed attempt to write
    the hello will fail and cause the info callback not to get written.)
    
    Fix for bug 4592; bugfix on 0.2.0.13-alpha.
---
 changes/bug4592     |    3 +++
 src/common/tortls.c |    3 ++-
 2 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/changes/bug4592 b/changes/bug4592
new file mode 100644
index 0000000..31140b0
--- /dev/null
+++ b/changes/bug4592
@@ -0,0 +1,3 @@
+  o Minor bugfixes:
+    - Detect SSL handshake even when the initial attempt to write the
+      server hello fails. Fix for bug 4592; bugfix on 0.2.0.13-alpha.
diff --git a/src/common/tortls.c b/src/common/tortls.c
index 4c9d218..c54ed46 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -951,7 +951,8 @@ tor_tls_server_info_callback(const SSL *ssl, int type, int val)
   (void) val;
   if (type != SSL_CB_ACCEPT_LOOP)
     return;
-  if (ssl->state != SSL3_ST_SW_SRVR_HELLO_A)
+  if ((ssl->state != SSL3_ST_SW_SRVR_HELLO_A) &&
+      (ssl->state != SSL3_ST_SW_SRVR_HELLO_B))
     return;
 
   tls = tor_tls_get_by_ssl(ssl);





More information about the tor-commits mailing list