From: Matt Caswell Date: Wed, 6 May 2015 10:40:06 +0000 (+0100) Subject: Fix DTLS session resumption X-Git-Tag: OpenSSL_1_1_0-pre1~1036 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7322abf5cefdeb47c7d61f3b916c428bf2cd69b6;p=openssl Fix DTLS session resumption The session object on the client side is initially created during construction of the ClientHello. If the client is DTLS1.2 capable then it will store 1.2 as the version for the session. However if the server is only DTLS1.0 capable then when the ServerHello comes back the client switches to using DTLS1.0 from then on. However the session version does not get updated. Therefore when the client attempts to resume that session the server throws an alert because of an incorrect protocol version. Reviewed-by: Tim Hudson --- diff --git a/ssl/s3_clnt.c b/ssl/s3_clnt.c index d6f53b0dea..888fe4f541 100644 --- a/ssl/s3_clnt.c +++ b/ssl/s3_clnt.c @@ -1036,7 +1036,7 @@ int ssl3_get_server_hello(SSL *s) al = SSL_AD_PROTOCOL_VERSION; goto f_err; } - s->version = s->method->version; + s->session->ssl_version = s->version = s->method->version; } else if ((p[0] != (s->version >> 8)) || (p[1] != (s->version & 0xff))) { SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_WRONG_SSL_VERSION); s->version = (s->version & 0xff00) | p[1];