[PR3597] Advance to the next state variant when reusing messages.
authorRichard Levitte <levitte@openssl.org>
Fri, 28 Nov 2014 19:40:10 +0000 (20:40 +0100)
committerRichard Levitte <levitte@openssl.org>
Fri, 28 Nov 2014 22:31:45 +0000 (23:31 +0100)
Previously, state variant was not advanced, which resulted in state
being stuck in the st1 variant (usually "_A").

This broke certificate callback retry logic when accepting connections
that were using SSLv2 ClientHello (hence reusing the message), because
their state never advanced to SSL3_ST_SR_CLNT_HELLO_C variant required
for the retry code path.

Reported by Yichun Zhang (agentzh).

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
ssl/s3_both.c

index 53b9390fdd3af30d0576825d0b0e19bc5d290ac6..3581fbf4ff426a95002ed5cc9329b9ce3cb36e41 100644 (file)
@@ -439,6 +439,7 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
                        goto f_err;
                        }
                *ok=1;
+               s->state = stn;
                s->init_msg = s->init_buf->data + 4;
                s->init_num = (int)s->s3->tmp.message_size;
                return s->init_num;