Fix DTLS1_BAD_VER regression
authorMatt Caswell <matt@openssl.org>
Mon, 2 Mar 2015 14:34:19 +0000 (14:34 +0000)
committerMatt Caswell <matt@openssl.org>
Mon, 9 Mar 2015 10:51:57 +0000 (10:51 +0000)
Commit 9cf0f187 in HEAD, and 68039af3 in 1.0.2, removed a version check
from dtls1_buffer_message() which was needed to distinguish between DTLS
1.x and Cisco's pre-standard version of DTLS (DTLS1_BAD_VER).

Based on an original patch by David Woodhouse <dwmw2@infradead.org>
RT#3703

Reviewed-by: Tim Hudson <tjh@openssl.org>
ssl/d1_both.c

index 7d48cc4df39e8f60e73acb838f7267ae5ead0b6e..a7d0a82085302c992475e76ddc42311ab07aae8e 100644 (file)
@@ -1086,8 +1086,10 @@ int dtls1_buffer_message(SSL *s, int is_ccs)
     memcpy(frag->fragment, s->init_buf->data, s->init_num);
 
     if (is_ccs) {
+        /* For DTLS1_BAD_VER the header length is non-standard */
         OPENSSL_assert(s->d1->w_msg_hdr.msg_len +
-                       DTLS1_CCS_HEADER_LENGTH == (unsigned int)s->init_num);
+                       ((s->version==DTLS1_BAD_VER)?3:DTLS1_CCS_HEADER_LENGTH)
+                       == (unsigned int)s->init_num);
     } else {
         OPENSSL_assert(s->d1->w_msg_hdr.msg_len +
                        DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_num);