From 7620b422e515249bbfff02d0372301334fe1dd50 Mon Sep 17 00:00:00 2001 Message-Id: <7620b422e515249bbfff02d0372301334fe1dd50.1407860168.git.crobinso@redhat.com> In-Reply-To: <2151695a5119a8d7f44d416c730df50a1e42695a.1407860168.git.crobinso@redhat.com> References: <2151695a5119a8d7f44d416c730df50a1e42695a.1407860168.git.crobinso@redhat.com> From: Eric Blake Date: Wed, 6 Aug 2014 14:48:59 -0600 Subject: [PATCH 2/3] blockjob: avoid memory leak during block pivot Valgrind caught a memory leak: ==2018== 9 bytes in 1 blocks are definitely lost in loss record 143 of 927 ==2018== at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==2018== by 0x8C42369: strdup (strdup.c:42) ==2018== by 0x50EACC9: virStrdup (virstring.c:676) ==2018== by 0x50E79E5: virStorageSourceCopy (virstoragefile.c:1845) ==2018== by 0x20A3FAA7: qemuDomainBlockCommit (qemu_driver.c:15620) ==2018== by 0x51DC6B2: virDomainBlockCommit (libvirt.c:20092) I traced it to the fact that blockcopy and blockcommit end up reparsing a backing chain on pivot, but the chain parsing code doesn't gracefully handle the case where the backing file is already known. I'm not exactly sure when this was introduced, but suspect that the refactoring in commit 9944b71 and friends that moved towards probing in-place rather than into a temporary structure are part of the cause. * src/util/virstoragefile.c (virStorageFileGetMetadataInternal): Don't leak any prior value. Signed-off-by: Eric Blake (cherry picked from commit a595a005725f142e1a258d10f7647982efa3cfd8) --- src/util/virstoragefile.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 3da9073..5b6b2f5 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -817,6 +817,7 @@ virStorageFileGetMetadataInternal(virStorageSourcePtr meta, goto cleanup; } + VIR_FREE(meta->backingStoreRaw); if (fileTypeInfo[meta->format].getBackingStore != NULL) { int store = fileTypeInfo[meta->format].getBackingStore(&meta->backingStoreRaw, backingFormat, -- 1.9.3