Properly handle duplicated messages from the next epoch
authorMatt Caswell <matt@openssl.org>
Tue, 16 Oct 2018 16:08:11 +0000 (17:08 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 26 Oct 2018 13:28:18 +0000 (14:28 +0100)
Since 1fb9fdc30 we may attempt to buffer a record from the next epoch
that has already been buffered. Prior to that this never occurred.

We simply ignore a failure to buffer a duplicated record.

Fixes #6902

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7414)

(cherry picked from commit 840facc3ccab481e1a0bc2cb6e7740e362df7422)

ssl/record/rec_layer_d1.c

index 43e1f9895319ca28cd68167855c876ab069906bb..1f9b31969d8268d8878d78b12183b49ab5879937 100644 (file)
@@ -185,14 +185,11 @@ int dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
         return -1;
     }
 
-    /* insert should not fail, since duplicates are dropped */
     if (pqueue_insert(queue->q, item) == NULL) {
-        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_BUFFER_RECORD,
-                 ERR_R_INTERNAL_ERROR);
+        /* Must be a duplicate so ignore it */
         OPENSSL_free(rdata->rbuf.buf);
         OPENSSL_free(rdata);
         pitem_free(item);
-        return -1;
     }
 
     return 1;