[libvirt] [PATCH 1/2] tests: avoid memory leak on testTLSSessionInit

* tests/virnettlscontexttest: fix memory leak on virnettlscontext test case. * Detected in valgrind run: ==25667== ==25667== 86,651 (34,680 direct, 51,971 indirect) bytes in 10 blocks are definitely lost in loss record 350 of 351 ==25667== at 0x4005447: calloc (vg_replace_malloc.c:467) ==25667== by 0x4F1F515D: gnutls_init (gnutls_state.c:270) ==25667== by 0x8053432: virNetTLSSessionNew (virnettlscontext.c:1181) ==25667== by 0x804DD24: testTLSSessionInit (virnettlscontexttest.c:624) ==25667== by 0x804F14D: virtTestRun (testutils.c:140) ==25667== ==25667== 100,578 (38,148 direct, 62,430 indirect) bytes in 11 blocks are definitely lost in loss record 351 of 351 ==25667== at 0x4005447: calloc (vg_replace_malloc.c:467) ==25667== by 0x4F1F515D: gnutls_init (gnutls_state.c:270) ==25667== by 0x8053432: virNetTLSSessionNew (virnettlscontext.c:1181) ==25667== by 0x804DD3C: testTLSSessionInit (virnettlscontexttest.c:625) ==25667== by 0x804F14D: virtTestRun (testutils.c:140) * How to reproduce? % cd libvirt && ./configure && make && make -C tests valgrind or % valgrind -v --leak-check=full ./tests/virnettlscontexttest Signed-off-by: Alex Jia <ajia@redhat.com> --- tests/virnettlscontexttest.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/tests/virnettlscontexttest.c b/tests/virnettlscontexttest.c index ee7b6b4..ece611a 100644 --- a/tests/virnettlscontexttest.c +++ b/tests/virnettlscontexttest.c @@ -712,6 +712,8 @@ static int testTLSSessionInit(const void *opaque) cleanup: virNetTLSContextFree(serverCtxt); virNetTLSContextFree(clientCtxt); + virNetTLSSessionFree(serverSess); + virNetTLSSessionFree(clientSess); gnutls_x509_crt_deinit(data->careq.crt); if (data->othercareq.filename) gnutls_x509_crt_deinit(data->othercareq.crt); -- 1.7.5.1

* src/rpc/virnettlscontext.c: fix memory leak on virNetTLSContextValidCertificate. * Detected in valgrind run: ==25667== ==25667== 6,085 (44 direct, 6,041 indirect) bytes in 1 blocks are definitely lost in loss record 326 of 351 ==25667== at 0x4005447: calloc (vg_replace_malloc.c:467) ==25667== by 0x4F2791F3: _asn1_add_node_only (structure.c:53) ==25667== by 0x4F27997A: _asn1_copy_structure3 (structure.c:421) ==25667== by 0x4F276A50: _asn1_append_sequence_set (element.c:144) ==25667== by 0x4F2743FF: asn1_der_decoding (decoding.c:1194) ==25667== by 0x4F22B9CC: gnutls_x509_crt_import (x509.c:229) ==25667== by 0x805274B: virNetTLSContextCheckCertificate (virnettlscontext.c:1009) ==25667== by 0x804DE32: testTLSSessionInit (virnettlscontexttest.c:693) ==25667== by 0x804F14D: virtTestRun (testutils.c:140) ==25667== ==25667== 23,188 (88 direct, 23,100 indirect) bytes in 11 blocks are definitely lost in loss record 346 of 351 ==25667== at 0x4005447: calloc (vg_replace_malloc.c:467) ==25667== by 0x4F22B841: gnutls_x509_crt_init (x509.c:50) ==25667== by 0x805272B: virNetTLSContextCheckCertificate (virnettlscontext.c:1003) ==25667== by 0x804DDD1: testTLSSessionInit (virnettlscontexttest.c:673) ==25667== by 0x804F14D: virtTestRun (testutils.c:140) * How to reproduce? % cd libvirt && ./configure && make && make -C tests valgrind or % valgrind -v --leak-check=full ./tests/virnettlscontexttest Signed-off-by: Alex Jia <ajia@redhat.com> --- src/rpc/virnettlscontext.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c index e901b63..e6123f9 100644 --- a/src/rpc/virnettlscontext.c +++ b/src/rpc/virnettlscontext.c @@ -1050,6 +1050,7 @@ static int virNetTLSContextValidCertificate(virNetTLSContextPtr ctxt, goto authdeny; } } + gnutls_x509_crt_deinit(cert); } #if 0 -- 1.7.5.1

On 09/04/2011 04:48 PM, Alex Jia wrote:
* src/rpc/virnettlscontext.c: fix memory leak on virNetTLSContextValidCertificate.
* Detected in valgrind run:
diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c index e901b63..e6123f9 100644 --- a/src/rpc/virnettlscontext.c +++ b/src/rpc/virnettlscontext.c @@ -1050,6 +1050,7 @@ static int virNetTLSContextValidCertificate(virNetTLSContextPtr ctxt, goto authdeny; } } + gnutls_x509_crt_deinit(cert); }
ACK and pushed. This leak could kill a long-running libvirtd with lots of TLS clients repeatedly connecting, and the cleanup is similar to the cleanup done on failure paths. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On 09/04/2011 04:48 PM, Alex Jia wrote:
* tests/virnettlscontexttest: fix memory leak on virnettlscontext test case.
* Detected in valgrind run:
+++ b/tests/virnettlscontexttest.c @@ -712,6 +712,8 @@ static int testTLSSessionInit(const void *opaque) cleanup: virNetTLSContextFree(serverCtxt); virNetTLSContextFree(clientCtxt); + virNetTLSSessionFree(serverSess); + virNetTLSSessionFree(clientSess);
Test leaks are not the end of the world, but they are also okay for pushing post-freeze. ACK and pushed. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
participants (2)
-
ajia@redhat.com
-
Eric Blake