PR: 2555
authorDr. Stephen Henson <steve@openssl.org>
Wed, 20 Jul 2011 15:17:20 +0000 (15:17 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 20 Jul 2011 15:17:20 +0000 (15:17 +0000)
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de>
Reviewed by: steve

Fix DTLS sequence number bug

ssl/d1_srvr.c

index 2736c26e8e5b5c790a7d8a1eb365e3ec518ae91a..c3144da0c2cbd0ae564c2e02e8d3ff7941f853c1 100644 (file)
@@ -165,6 +165,8 @@ int dtls1_accept(SSL *s)
        s->in_handshake++;
        if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);
 
+       s->d1->listen = listen;
+
        if (s->cert == NULL)
                {
                SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET);
@@ -274,6 +276,12 @@ int dtls1_accept(SSL *s)
 
                        s->init_num=0;
 
+                       /* Reflect ClientHello sequence to remain stateless while listening */
+                       if (listen)
+                               {
+                               memcpy(s->s3->write_sequence, s->s3->read_sequence, sizeof(s->s3->write_sequence));
+                               }
+
                        /* If we're just listening, stop here */
                        if (listen && s->state == SSL3_ST_SW_SRVR_HELLO_A)
                                {