This patch to the 0.9.8 branch fixes two bugs with misordered incoming packets in DTLS, which are reported as RT #1752.
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. --- ssl/d1_lib.c~ 2008-10-02 06:43:47.000000000 +0100 +++ ssl/d1_lib.c 2008-10-05 21:31:38.000000000 +0100 @@ -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)); --- ssl/d1_pkt.c~ 2008-10-02 06:43:47.000000000 +0100 +++ ssl/d1_pkt.c 2008-10-05 21:44:54.000000000 +0100 @@ -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 */ } -- dwmw2 ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager [EMAIL PROTECTED]