The client always starts timer for the retransmission of the ChangeCipherSpec 
and Finished, although that is only correct when performing a full handshake. 
With the abbreviated session resumption handshake, these messages are not 
followed by a response of the server, so the timer is never stopped and causes 
retransmissions until the connection is dropped. This patch adds the 
distinction between full and abbreviated handshakes and prevents the timer from 
being started in the latter case.

Best regards
Robin



--- ssl/d1_clnt.c       27 Aug 2010 12:10:11 -0000      1.16.2.15.2.3
+++ ssl/d1_clnt.c       27 Apr 2011 12:27:50 -0000
@@ -407,7 +407,8 @@
 
                case SSL3_ST_CW_CHANGE_A:
                case SSL3_ST_CW_CHANGE_B:
-                       dtls1_start_timer(s);
+                       if (!s->hit)
+                               dtls1_start_timer(s);
                        ret=dtls1_send_change_cipher_spec(s,
                                SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
                        if (ret <= 0) goto end;
@@ -442,7 +443,8 @@
 
                case SSL3_ST_CW_FINISHED_A:
                case SSL3_ST_CW_FINISHED_B:
-                       dtls1_start_timer(s);
+                       if (!s->hit)
+                               dtls1_start_timer(s);
                        ret=dtls1_send_finished(s,
                                SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B,
                                s->method->ssl3_enc->client_finished_label,



Attachment: dtls-session-resumption-timer-bug-0.9.8.patch
Description: Binary data

Attachment: dtls-session-resumption-timer-bug-1.0.0.patch
Description: Binary data

Attachment: dtls-session-resumption-timer-bug-1.0.1.patch
Description: Binary data

Reply via email to