]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Work around a memory leak in openssl 0.9.8g (and maybe others)
authorNick Mathewson <nickm@torproject.org>
Thu, 17 Sep 2009 04:01:20 +0000 (00:01 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 17 Sep 2009 04:01:20 +0000 (00:01 -0400)
ChangeLog
src/common/tortls.c

index fccae7daed94e753eddc1fc14e0e6e714a324c0c..6446943e57c58366011eae827324748f2c952d44 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -45,6 +45,9 @@ Changes in version 0.2.1.20 - 2009-??-??
     - Avoid segfault in rare cases when finishing an introduction circuit
       as a client and finding out that we don't have an introduction key
       for it. Fixes bug 1073. Reported by Aaron Swartz.
+    - Work around a small memory leak in some versions of OpenSSL that
+      stopped the memory used by the hostname TLS extension from being
+      freed.
 
   o Minor features:
     - Add a "getinfo status/accepted-server-descriptor" controller
index aeb0ca0800fd2538beb55f9932296db55c1a7eae..c6b11e9a6ee5dee95ad8a26cdae896f7417f5abc 100644 (file)
@@ -829,6 +829,9 @@ tor_tls_new(int sock, int isServer)
   if (!SSL_set_cipher_list(result->ssl,
                      isServer ? SERVER_CIPHER_LIST : CLIENT_CIPHER_LIST)) {
     tls_log_errors(NULL, LOG_WARN, "setting ciphers");
+#ifdef SSL_set_tlsext_host_name
+    SSL_set_tlsext_host_name(result->ssl, NULL);
+#endif
     SSL_free(result->ssl);
     tor_free(result);
     return NULL;
@@ -839,6 +842,9 @@ tor_tls_new(int sock, int isServer)
   bio = BIO_new_socket(sock, BIO_NOCLOSE);
   if (! bio) {
     tls_log_errors(NULL, LOG_WARN, "opening BIO");
+#ifdef SSL_set_tlsext_host_name
+    SSL_set_tlsext_host_name(result->ssl, NULL);
+#endif
     SSL_free(result->ssl);
     tor_free(result);
     return NULL;
@@ -919,6 +925,9 @@ tor_tls_free(tor_tls_t *tls)
   if (!removed) {
     log_warn(LD_BUG, "Freeing a TLS that was not in the ssl->tls map.");
   }
+#ifdef SSL_set_tlsext_host_name
+  SSL_set_tlsext_host_name(tls->ssl, NULL);
+#endif
   SSL_free(tls->ssl);
   tls->ssl = NULL;
   tls->negotiated_callback = NULL;