Don't wait for dry at the end of a handshake
authorMatt Caswell <matt@openssl.org>
Tue, 16 Jan 2018 11:26:50 +0000 (11:26 +0000)
committerMatt Caswell <matt@openssl.org>
Wed, 21 Mar 2018 10:32:15 +0000 (10:32 +0000)
For DTLS/SCTP we were waiting for a dry event during the call to
tls_finish_handshake(). This function just tidies up various internal
things, and after it completes the handshake is over. I can find no good
reason for waiting for a dry event here, and nothing in RFC6083 suggests
to me that we should need to. More importantly though it seems to be
wrong. It is perfectly possible for a peer to send app data/alerts/new
handshake while we are still cleaning up our handshake. If this happens
then we will never get the dry event and so we cannot continue.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5085)

ssl/statem/statem_lib.c

index 570214553a97e777c2ec6f71c6ad12b1bc040af0..4e606d84e8afe09a3f71ed8b6cacdabf05c513e0 100644 (file)
@@ -273,15 +273,6 @@ WORK_STATE tls_finish_handshake(SSL *s, WORK_STATE wst)
 {
     void (*cb) (const SSL *ssl, int type, int val) = NULL;
 
-#ifndef OPENSSL_NO_SCTP
-    if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s))) {
-        WORK_STATE ret;
-        ret = dtls_wait_for_dry(s);
-        if (ret != WORK_FINISHED_CONTINUE)
-            return ret;
-    }
-#endif
-
     /* clean a few things up */
     ssl3_cleanup_key_block(s);