diff options
author | Matt Caswell <matt@openssl.org> | 2014-11-25 13:36:00 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2014-11-26 10:10:21 +0000 |
commit | 8a35dbb6d89a16d792b79b157b3e89443639ec94 (patch) | |
tree | f226d18d416a24cd49f9d190d02f6f608da2bdf3 | |
parent | 3a0765882c4b3b67960b7efb203570764dd4ed29 (diff) | |
download | openssl-8a35dbb6d89a16d792b79b157b3e89443639ec94.tar.gz |
Fixed memory leak due to incorrect freeing of DTLS reassembly bit mask
PR#3608
Reviewed-by: Tim Hudson <tjh@openssl.org>
-rw-r--r-- | ssl/d1_both.c | 3 | ||||
-rw-r--r-- | ssl/d1_lib.c | 6 | ||||
-rw-r--r-- | ssl/ssl_locl.h | 1 |
3 files changed, 4 insertions, 6 deletions
diff --git a/ssl/d1_both.c b/ssl/d1_both.c index f2ff943001..2324675579 100644 --- a/ssl/d1_both.c +++ b/ssl/d1_both.c @@ -211,8 +211,7 @@ dtls1_hm_fragment_new(unsigned long frag_len, int reassembly) return frag; } -static void -dtls1_hm_fragment_free(hm_fragment *frag) +void dtls1_hm_fragment_free(hm_fragment *frag) { if (frag->msg_header.is_ccs) diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c index 5f7a3582cc..ab8730c883 100644 --- a/ssl/d1_lib.c +++ b/ssl/d1_lib.c @@ -187,16 +187,14 @@ static void dtls1_clear_queues(SSL *s) while( (item = pqueue_pop(s->d1->buffered_messages)) != NULL) { frag = (hm_fragment *)item->data; - OPENSSL_free(frag->fragment); - OPENSSL_free(frag); + dtls1_hm_fragment_free(frag); pitem_free(item); } while ( (item = pqueue_pop(s->d1->sent_messages)) != NULL) { frag = (hm_fragment *)item->data; - OPENSSL_free(frag->fragment); - OPENSSL_free(frag); + dtls1_hm_fragment_free(frag); pitem_free(item); } diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h index 0600f375b9..c5de1930f4 100644 --- a/ssl/ssl_locl.h +++ b/ssl/ssl_locl.h @@ -1219,6 +1219,7 @@ int dtls1_is_timer_expired(SSL *s); void dtls1_double_timeout(SSL *s); int dtls1_send_newsession_ticket(SSL *s); unsigned int dtls1_min_mtu(void); +void dtls1_hm_fragment_free(hm_fragment *frag); /* some client-only functions */ int ssl3_client_hello(SSL *s); |