diff options
author | Matt Caswell <matt@openssl.org> | 2014-12-02 00:16:55 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2014-12-03 09:43:49 +0000 |
commit | ceb4c684e463d560e35833da5f575719b5c5af51 (patch) | |
tree | 5ebc73c27357b27f31a78e288a78aabaf10b446c /ssl | |
parent | a8da754d8482f09ce621305b156c2a0d64c16e9b (diff) |
If we really get a situation where the underlying mtu is less than the minimum
we will support then dtls1_do_write can go into an infinite loop. This commit
fixes that.
Reviewed-by: Tim Hudson <tjh@openssl.org>
(cherry picked from commit d3d9eef31661633f5b003a9e115c1822f79d1870)
Diffstat (limited to 'ssl')
-rw-r--r-- | ssl/d1_both.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/ssl/d1_both.c b/ssl/d1_both.c index 53a670ea11..b44569736b 100644 --- a/ssl/d1_both.c +++ b/ssl/d1_both.c @@ -260,6 +260,7 @@ int dtls1_do_write(SSL *s, int type) { int ret; int curr_mtu; + int retry = 1; unsigned int len, frag_off, mac_size, blocksize; if(!dtls1_query_mtu(s)) @@ -365,13 +366,15 @@ int dtls1_do_write(SSL *s, int type) * is fine and wait for an alert to handle the * retransmit */ - if ( BIO_ctrl(SSL_get_wbio(s), + if ( retry && BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0 ) { if(!(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) { if(!dtls1_query_mtu(s)) return -1; + /* Have one more go */ + retry = 0; } else return -1; |