Fix memory leak during multi-message reception using STARTTLS
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 17 Feb 2018 16:53:27 +0000 (16:53 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 17 Feb 2018 16:53:27 +0000 (16:53 +0000)
Reported-by: Wolfgang Breyha
doc/doc-txt/ChangeLog
src/src/tls-gnu.c
src/src/tls-openssl.c

index 988c509..c5a506c 100644 (file)
@@ -106,6 +106,10 @@ JH/19 Speed up macro lookups during configuration file read, by skipping non-
 JH/20 DANE support moved from Experimental to mainline.  The Makefile control
       for the build is renamed.
 
+JH/21 Fix memory leak during multi-message connections using STARTTLS.  A buffer
+      was allocated for every new TLS startup, meaning one per message.  Fix
+      by only allocating once (OpenSSL) or freeing on TLS-close (GnuTLS).
+
 
 Exim version 4.90
 -----------------
index dab9697..38e8eab 100644 (file)
@@ -2464,9 +2464,10 @@ gnutls_certificate_free_credentials(state->x509_cred);
 
 
 state->tlsp->active = -1;
+if (state->xfer_buffer) store_free(state->xfer_buffer);
 memcpy(state, &exim_gnutls_state_init, sizeof(exim_gnutls_state_init));
 
-if ((state_server.session == NULL) && (state_client.session == NULL))
+if (!state_server.session && !state_client.session)
   {
   gnutls_global_deinit();
   exim_gnutls_base_init_done = FALSE;
index 71d748f..7a6e8bf 100644 (file)
@@ -2095,7 +2095,7 @@ DEBUG(D_tls)
    smtp_read_response()/ip_recv().
    Hence no need to duplicate for _in and _out.
  */
-ssl_xfer_buffer = store_malloc(ssl_xfer_buffer_size);
+if (!ssl_xfer_buffer) ssl_xfer_buffer = store_malloc(ssl_xfer_buffer_size);
 ssl_xfer_buffer_lwm = ssl_xfer_buffer_hwm = 0;
 ssl_xfer_eof = ssl_xfer_error = 0;