Every sent handshake message is inserted into a sent queue until it has been acknowledged. When a timeout occurs, all messages in the sent queue will be repeated. When inserting a message into the queue, its sequence number bitwise ORed with the current epoch will used as the index. When a retransmission is necessary, the messages in the queue are looked up only by the sequence number as index, so nothing will be found and the retransmission fails. Removing the epoch when generating the index solves this issue.

--- ssl/d1_both.c       2007-10-17 23:17:49.000000000 +0200
+++ ssl/d1_both.c       2009-01-28 13:57:57.000000000 +0100
@@ -1004,7 +1004,7 @@
        frag->msg_header.is_ccs = is_ccs;

        pq_64bit_init(&seq64);
-       pq_64bit_assign_word(&seq64, epoch<<16 | frag->msg_header.seq);
+       pq_64bit_assign_word(&seq64, frag->msg_header.seq);

        item = pitem_new(seq64, frag);
        pq_64bit_free(&seq64);

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to