Fix DTLS unprocessed records bug
authorMatt Caswell <matt@openssl.org>
Tue, 5 Jul 2016 08:51:08 +0000 (09:51 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 19 Aug 2016 12:52:40 +0000 (13:52 +0100)
commit738ad946ddf7cbb839447981304df89f5f83b18b
tree33f6e1c6481229e0183245e90b2113327c21ce26
parent6fc1748ec65c94c195d02b59556434e36a5f7651
Fix DTLS unprocessed records bug

During a DTLS handshake we may get records destined for the next epoch
arrive before we have processed the CCS. In that case we can't decrypt or
verify the record yet, so we buffer it for later use. When we do receive
the CCS we work through the queue of unprocessed records and process them.

Unfortunately the act of processing wipes out any existing packet data
that we were still working through. This includes any records from the new
epoch that were in the same packet as the CCS. We should only process the
buffered records if we've not got any data left.

Reviewed-by: Richard Levitte <levitte@openssl.org>
ssl/record/rec_layer_d1.c
ssl/record/ssl3_record.c