summaryrefslogtreecommitdiffstats
path: root/ssl/s3_srvr.c
diff options
context:
space:
mode:
authorDavid Benjamin <davidben@chromium.org>2014-11-20 16:22:40 +0100
committerEmilia Kasper <emilia@openssl.org>2014-11-20 16:31:42 +0100
commit7fc5f4f11782494d620a752ecfb0cb8867e80860 (patch)
treeb87e1326c83fe2c62de94d2340d0cdb7a42f771f /ssl/s3_srvr.c
parent249a3e362fe406f8bc05cd3e69955a34a080b2b9 (diff)
Do not resume a session if the negotiated protocol version does not match
the session's version (server). See also BoringSSL's commit bdf5e72f50e25f0e45e825c156168766d8442dde. Reviewed-by: Dr. Stephen Henson <steve@openssl.org> (cherry picked from commit 9e189b9dc10786c755919e6792e923c584c918a1)
Diffstat (limited to 'ssl/s3_srvr.c')
-rw-r--r--ssl/s3_srvr.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ssl/s3_srvr.c b/ssl/s3_srvr.c
index e710898402..59ff271381 100644
--- a/ssl/s3_srvr.c
+++ b/ssl/s3_srvr.c
@@ -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;
}