From: Matt Caswell Date: Tue, 3 Nov 2015 15:49:08 +0000 (+0000) Subject: Only call ssl3_init_finished_mac once for DTLS X-Git-Tag: OpenSSL_1_0_1q~21 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=e83009840af76d06a13192be69c2b273ac7e96a0;p=oweals%2Fopenssl.git Only call ssl3_init_finished_mac once for DTLS In DTLS if an IO retry occurs during writing of a fragmented ClientHello then we can end up reseting the finish mac variables on the retry, which causes a handshake failure. We should only reset on the first attempt not on retries. Thanks to BoringSSL for reporting this issue. RT#4119 Reviewed-by: Tim Hudson (cherry picked from commit 15a7164eb7d4d031608fcec2801d7f7b11b16923) --- diff --git a/ssl/d1_clnt.c b/ssl/d1_clnt.c index 20ed02cbae..eb371a255f 100644 --- a/ssl/d1_clnt.c +++ b/ssl/d1_clnt.c @@ -299,13 +299,12 @@ int dtls1_connect(SSL *s) #endif case SSL3_ST_CW_CLNT_HELLO_A: - case SSL3_ST_CW_CLNT_HELLO_B: - s->shutdown = 0; /* every DTLS ClientHello resets Finished MAC */ ssl3_init_finished_mac(s); + case SSL3_ST_CW_CLNT_HELLO_B: dtls1_start_timer(s); ret = dtls1_client_hello(s); if (ret <= 0)