summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-11-03 15:49:08 +0000
committerMatt Caswell <matt@openssl.org>2015-11-10 18:47:57 +0000
commite83009840af76d06a13192be69c2b273ac7e96a0 (patch)
tree054b73c922458169a75c343d02369c0b0d441acf /ssl
parent84d0c40f3fbcb9e3067cbbc2f01bd965e587c178 (diff)
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 <tjh@openssl.org> (cherry picked from commit 15a7164eb7d4d031608fcec2801d7f7b11b16923)
Diffstat (limited to 'ssl')
-rw-r--r--ssl/d1_clnt.c3
1 files changed, 1 insertions, 2 deletions
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)