]> git.ipfire.org Git - thirdparty/libvirt.git/commit
blockjob: avoid memory leak during block pivot
authorEric Blake <eblake@redhat.com>
Wed, 6 Aug 2014 20:48:59 +0000 (14:48 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 7 Aug 2014 18:57:31 +0000 (12:57 -0600)
commit7620b422e515249bbfff02d0372301334fe1dd50
treebc3b7c1c2e4287a2a13d0c6fe26639613429d269
parent2151695a5119a8d7f44d416c730df50a1e42695a
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 <eblake@redhat.com>
(cherry picked from commit a595a005725f142e1a258d10f7647982efa3cfd8)
src/util/virstoragefile.c