summaryrefslogtreecommitdiffstats
path: root/ssl
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2014-11-25 13:36:00 +0000
committerMatt Caswell <matt@openssl.org>2014-11-26 10:14:13 +0000
commit2e84084fbcbbf032a0021a73ef56711966b28159 (patch)
tree607c10ddfdd111097cfce905c83c334db615863e /ssl
parent26f9cfbdcae158f1718b0fa59d2f95ffbbc84be6 (diff)
Fixed memory leak due to incorrect freeing of DTLS reassembly bit mask
PR#3608 Reviewed-by: Tim Hudson <tjh@openssl.org> (cherry picked from commit 8a35dbb6d89a16d792b79b157b3e89443639ec94)
Diffstat (limited to 'ssl')
-rw-r--r--ssl/d1_both.c3
-rw-r--r--ssl/d1_lib.c6
-rw-r--r--ssl/ssl_locl.h1
3 files changed, 4 insertions, 6 deletions
diff --git a/ssl/d1_both.c b/ssl/d1_both.c
index 2e4250fcfe..b58fdc2f1d 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 82ca653920..f7d681bfdb 100644
--- a/ssl/d1_lib.c
+++ b/ssl/d1_lib.c
@@ -161,16 +161,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 90c82f5b20..cfb9a2a3f2 100644
--- a/ssl/ssl_locl.h
+++ b/ssl/ssl_locl.h
@@ -998,6 +998,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);