| Bug #14780 | memory leak for mysql 4.1.14 with openssl enabled | ||
|---|---|---|---|
| Submitted: | 9 Nov 2005 8:44 | Modified: | 9 Dec 2005 0:23 |
| Reporter: | Aleksey Kishkin | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 4.1 | OS: | Linux (linux) |
| Assigned to: | Sergei Glukhov | CPU Architecture: | Any |
[9 Nov 2005 8:44]
Aleksey Kishkin
[9 Nov 2005 17:56]
Haobo Yu
After the following patch:
--- mysql-4.1.14/vio/viossl.c 2005-11-08 22:16:48.000000000 -0800
+++ mysql-4.1.14/vio/viossl.c 2005-11-08 22:18:16.000000000 -0800
@@ -83,7 +83,11 @@
if (vio)
{
if (vio->type != VIO_CLOSED)
+#ifdef HAVE_VIO /* WAX */
+ vio->vioclose(vio);
+#else
vio_close(vio);
+#endif
my_free((gptr) vio,MYF(0));
}
}
There are still memory leaks. It seems that the SSL context allocated during mysql_real_connect() isn't freed by mysql_close(). Here is what valgrind says:
==26144== 11779 (248 direct, 11531 indirect) bytes in 1 blocks are definitely lost in loss record 11 of 18
==26144== at 0x1B9034C4: malloc (vg_replace_malloc.c:130)
==26144== by 0x1BA1729F: (within /lib/libcrypto.so.0.9.7a)
==26144== by 0x1BA178FB: CRYPTO_malloc (in /lib/libcrypto.so.0.9.7a)
==26144== by 0x1B9D387E: SSL_CTX_new (in /lib/libssl.so.0.9.7a)
==26144== by 0x8093D11: new_VioSSLConnectorFd (in /usr/bin/mysql)
==26144== by 0x8090826: mysql_real_connect (in /usr/bin/mysql)
==26144== by 0x805C463: (within /usr/bin/mysql)
==26144== by 0x805C6B7: (within /usr/bin/mysql)
==26144== by 0x805789C: main (in /usr/bin/mysql)
[9 Nov 2005 21:01]
Haobo Yu
The following patch fixed SSL context leaks.
--- include/violite.h 2005-11-09 10:38:46.000000000 -0800
+++ include/violite.h 2005-11-09 10:42:31.000000000 -0800
@@ -118,6 +118,7 @@
*new_VioSSLConnectorFd(const char *key_file, const char *cert_file,
const char *ca_file, const char *ca_path,
const char *cipher);
+void free_VioSSLConnectorFd(struct st_VioSSLConnectorFd*);
struct st_VioSSLAcceptorFd
*new_VioSSLAcceptorFd(const char *key_file, const char *cert_file,
const char *ca_file,const char *ca_path,
--- sql-common/client.c 2005-11-09 10:41:39.000000000 -0800
+++ sql-common/client.c 2005-11-09 10:41:39.000000000 -0800
@@ -1492,7 +1492,9 @@
my_free(mysql->options.ssl_ca, MYF(MY_ALLOW_ZERO_PTR));
my_free(mysql->options.ssl_capath, MYF(MY_ALLOW_ZERO_PTR));
my_free(mysql->options.ssl_cipher, MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->connector_fd,MYF(MY_ALLOW_ZERO_PTR));
+#ifdef HAVE_OPENSSL
+ free_VioSSLConnectorFd(mysql->connector_fd);
+#endif
mysql->options.ssl_key = 0;
mysql->options.ssl_cert = 0;
mysql->options.ssl_ca = 0;
--- vio/viosslfactories.c 2005-11-09 10:38:56.000000000 -0800
+++ vio/viosslfactories.c 2005-11-09 10:45:07.000000000 -0800
@@ -207,6 +207,16 @@
Add option --verify to mysql to be able to change verification mode
*/
+void
+free_VioSSLConnectorFd(struct st_VioSSLConnectorFd* st)
+{
+ if (st) {
+ SSL_CTX_free(st->ssl_context);
+ st->ssl_context = 0;
+ }
+ my_free((gptr)st,MYF(MY_ALLOW_ZERO_PTR));
+}
+
struct st_VioSSLConnectorFd *
new_VioSSLConnectorFd(const char* key_file,
const char* cert_file,
[15 Nov 2005 13:16]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32270
[21 Nov 2005 12:06]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32452
[21 Nov 2005 12:08]
Sergei Glukhov
Fixed in 4.1.16
[9 Dec 2005 0:23]
Paul DuBois
Noted in 4.1.16 changelog.
