Commit 4db3e884 authored by Lutz Jänicke's avatar Lutz Jänicke
Browse files

Firstly, the bitmap we use for replay protection was ending up with zero

length, so a _single_ pair of packets getting switched around would
cause one of them to be 'dropped'.

Secondly, it wasn't even _dropping_ the offending packets, in the
non-blocking case. It was just returning garbage instead.
PR: #1752
Submitted by: David Woodhouse <dwmw2@infradead.org>
parent ab073bad
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ int dtls1_new(SSL *s)
	pq_64bit_init(&(d1->bitmap.map));
	pq_64bit_init(&(d1->bitmap.max_seq_num));
	
	d1->next_bitmap.length = d1->bitmap.length;
	pq_64bit_init(&(d1->next_bitmap.map));
	pq_64bit_init(&(d1->next_bitmap.max_seq_num));

+1 −0
Original line number Diff line number Diff line
@@ -597,6 +597,7 @@ again:
	/* check whether this is a repeat, or aged record */
	if ( ! dtls1_record_replay_check(s, bitmap, &(rr->seq_num)))
		{
		rr->length = 0;
		s->packet_length=0; /* dump this record */
		goto again;     /* get another record */
		}