PR: 2555
authorDr. Stephen Henson <steve@openssl.org>
Wed, 20 Jul 2011 15:17:51 +0000 (15:17 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 20 Jul 2011 15:17:51 +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 e5e5a5958cefda0df4e92459e468efec34a6aca6..1d3805a1b438e18403d92880be96a43dcbce1de9 100644 (file)
@@ -167,6 +167,8 @@ int dtls1_accept(SSL *s)
        s->in_handshake++;
        if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(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);
        if (s->cert == NULL)
                {
                SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET);
@@ -276,6 +278,12 @@ int dtls1_accept(SSL *s)
 
                        s->init_num=0;
 
 
                        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)
                                {
                        /* If we're just listening, stop here */
                        if (listen && s->state == SSL3_ST_SW_SRVR_HELLO_A)
                                {