summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2012-03-06 13:20:20 +0000
committerDr. Stephen Henson <steve@openssl.org>2012-03-06 13:20:20 +0000
commit4e7f6d380ded86f19dea9465ac296b1be4e2d180 (patch)
treeda796308e6c99ef514e5dc4c51b6cfec041a6406 /ssl
parentf0be325f885201430206559831f5e1c936be5df3 (diff)
PR: 2748
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de> Fix possible DTLS timer deadlock.
Diffstat (limited to 'ssl')
-rw-r--r--ssl/d1_clnt.c2
-rw-r--r--ssl/d1_srvr.c7
2 files changed, 4 insertions, 5 deletions
diff --git a/ssl/d1_clnt.c b/ssl/d1_clnt.c
index 4001a5a673..ac24bfb35e 100644
--- a/ssl/d1_clnt.c
+++ b/ssl/d1_clnt.c
@@ -257,7 +257,6 @@ int dtls1_connect(SSL *s)
if (ret <= 0) goto end;
else
{
- dtls1_stop_timer(s);
if (s->hit)
s->state=SSL3_ST_CR_FINISHED_A;
else
@@ -350,6 +349,7 @@ int dtls1_connect(SSL *s)
case SSL3_ST_CR_SRVR_DONE_B:
ret=ssl3_get_server_done(s);
if (ret <= 0) goto end;
+ dtls1_stop_timer(s);
if (s->s3->tmp.cert_req)
s->state=SSL3_ST_CW_CERT_A;
else
diff --git a/ssl/d1_srvr.c b/ssl/d1_srvr.c
index c3144da0c2..f7bb18e703 100644
--- a/ssl/d1_srvr.c
+++ b/ssl/d1_srvr.c
@@ -473,15 +473,16 @@ int dtls1_accept(SSL *s)
ret = ssl3_check_client_hello(s);
if (ret <= 0)
goto end;
- dtls1_stop_timer(s);
if (ret == 2)
+ {
+ dtls1_stop_timer(s);
s->state = SSL3_ST_SR_CLNT_HELLO_C;
+ }
else {
/* could be sent for a DH cert, even if we
* have not asked for it :-) */
ret=ssl3_get_client_certificate(s);
if (ret <= 0) goto end;
- dtls1_stop_timer(s);
s->init_num=0;
s->state=SSL3_ST_SR_KEY_EXCH_A;
}
@@ -491,7 +492,6 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SR_KEY_EXCH_B:
ret=ssl3_get_client_key_exchange(s);
if (ret <= 0) goto end;
- dtls1_stop_timer(s);
s->state=SSL3_ST_SR_CERT_VRFY_A;
s->init_num=0;
@@ -513,7 +513,6 @@ int dtls1_accept(SSL *s)
/* we should decide if we expected this one */
ret=ssl3_get_cert_verify(s);
if (ret <= 0) goto end;
- dtls1_stop_timer(s);
s->state=SSL3_ST_SR_FINISHED_A;
s->init_num=0;