From f20404fce90919b614b737d07cc75d9e1c019fb8 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Thu, 3 May 2018 12:07:47 +0100 Subject: Don't fail on an out-of-order CCS in DTLS Fixes #4929 Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/6170) --- ssl/statem/statem_clnt.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'ssl/statem/statem_clnt.c') diff --git a/ssl/statem/statem_clnt.c b/ssl/statem/statem_clnt.c index 91b986fc89..60e987adb1 100644 --- a/ssl/statem/statem_clnt.c +++ b/ssl/statem/statem_clnt.c @@ -375,6 +375,20 @@ int ossl_statem_client_read_transition(SSL *s, int mt) err: /* No valid transition found */ + if (SSL_IS_DTLS(s) && mt == SSL3_MT_CHANGE_CIPHER_SPEC) { + BIO *rbio; + + /* + * CCS messages don't have a message sequence number so this is probably + * because of an out-of-order CCS. We'll just drop it. + */ + s->init_num = 0; + s->rwstate = SSL_READING; + rbio = SSL_get_rbio(s); + BIO_clear_retry_flags(rbio); + BIO_set_retry_read(rbio); + return 0; + } SSLfatal(s, SSL3_AD_UNEXPECTED_MESSAGE, SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION, SSL_R_UNEXPECTED_MESSAGE); -- cgit v1.2.3