Do not resume a session if the negotiated protocol version does not match
[openssl.git] / ssl / s3_srvr.c
index e71089840242e11a8c3cd6ab41db8e61f46e284b..59ff27138145ba777b2a8d7c7547858170e3f348 100644 (file)
@@ -1051,7 +1051,16 @@ int ssl3_get_client_hello(SSL *s)
        else
                {
                i=ssl_get_prev_session(s, p, j, d + n);
-               if (i == 1)
+               /*
+                * Only resume if the session's version matches the negotiated
+                * version.
+                * RFC 5246 does not provide much useful advice on resumption
+                * with a different protocol version. It doesn't forbid it but
+                * the sanity of such behaviour would be questionable.
+                * In practice, clients do not accept a version mismatch and
+                * will abort the handshake with an error.
+                */
+               if (i == 1 && s->version == s->session->ssl_version)
                        { /* previous session */
                        s->hit=1;
                        }