summaryrefslogtreecommitdiffstats
path: root/ssl/d1_both.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2009-06-05 14:46:49 +0000
committerDr. Stephen Henson <steve@openssl.org>2009-06-05 14:46:49 +0000
commit4e63da06698fd217d89a5ec39fd0c7b26dc8d0c0 (patch)
tree802cf1019da632b42e72ee83b0eab381e8e58b60 /ssl/d1_both.c
parent15b0a5651c78c7a7372497819f983541d3d2d9c4 (diff)
PR: 1950
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de> Reviewed by: steve@openssl.org DTLS fragment retransmission bug.
Diffstat (limited to 'ssl/d1_both.c')
-rw-r--r--ssl/d1_both.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ssl/d1_both.c b/ssl/d1_both.c
index ebc03482f0..7039d05f0e 100644
--- a/ssl/d1_both.c
+++ b/ssl/d1_both.c
@@ -569,9 +569,13 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok)
item = pqueue_find(s->d1->buffered_messages, seq64be);
/* Discard the message if sequence number was already there, is
- * too far in the future or the fragment is already in the queue */
+ * too far in the future, already in the queue or if we received
+ * a FINISHED before the SERVER_HELLO, which then must be a stale
+ * retransmit.
+ */
if (msg_hdr->seq <= s->d1->handshake_read_seq ||
- msg_hdr->seq > s->d1->handshake_read_seq + 10 || item != NULL)
+ msg_hdr->seq > s->d1->handshake_read_seq + 10 || item != NULL ||
+ s->d1->handshake_read_seq == 0 && msg_hdr->type == SSL3_MT_FINISHED)
{
unsigned char devnull [256];