From: Matt Caswell Date: Tue, 25 Nov 2014 13:36:00 +0000 (+0000) Subject: Fixed memory leak due to incorrect freeing of DTLS reassembly bit mask X-Git-Tag: master-pre-reformat~220 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a35dbb6d89a16d792b79b157b3e89443639ec94;p=thirdparty%2Fopenssl.git Fixed memory leak due to incorrect freeing of DTLS reassembly bit mask PR#3608 Reviewed-by: Tim Hudson --- diff --git a/ssl/d1_both.c b/ssl/d1_both.c index f2ff9430013..2324675579f 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 5f7a3582cc4..ab8730c8838 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 0600f375b9b..c5de1930f40 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);