[libvirt] [PATCH] qemu: Fix memory leak on metadata fetching

As written in virStorageFileGetMetadataFromFD decription, caller must free metadata after use. Qemu driver miss this and therefore leak metadata which can grow to huge mem leak if somebody query for blockInfo a lot. --- src/qemu/qemu_driver.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0f91910..d45c7c5 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6949,7 +6949,7 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom, int ret = -1; int fd = -1; off_t end; - virStorageFileMetadata meta; + virStorageFileMetadata *meta = NULL; virDomainDiskDefPtr disk = NULL; struct stat sb; int i; @@ -7017,9 +7017,14 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom, } } + if (VIR_ALLOC(meta) < 0) { + virReportOOMError(); + goto cleanup; + } + if (virStorageFileGetMetadataFromFD(path, fd, format, - &meta) < 0) + meta) < 0) goto cleanup; /* Get info for normal formats */ @@ -7056,8 +7061,8 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom, /* If the file we probed has a capacity set, then override * what we calculated from file/block extents */ - if (meta.capacity) - info->capacity = meta.capacity; + if (meta->capacity) + info->capacity = meta->capacity; /* Set default value .. */ info->allocation = info->physical; @@ -7091,6 +7096,7 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom, } cleanup: + virStorageFileFreeMetadata(meta); VIR_FORCE_CLOSE(fd); if (vm) virDomainObjUnlock(vm); -- 1.7.5.rc3

On 07/28/2011 07:56 AM, Michal Privoznik wrote:
As written in virStorageFileGetMetadataFromFD decription, caller must free metadata after use. Qemu driver miss this and therefore leak metadata which can grow to huge mem leak if somebody query for blockInfo a lot. --- src/qemu/qemu_driver.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-)
ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On 28.07.2011 16:00, Eric Blake wrote:
On 07/28/2011 07:56 AM, Michal Privoznik wrote:
As written in virStorageFileGetMetadataFromFD decription, caller must free metadata after use. Qemu driver miss this and therefore leak metadata which can grow to huge mem leak if somebody query for blockInfo a lot. --- src/qemu/qemu_driver.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-)
ACK.
Thanks, pushed. Michal
participants (2)
-
Eric Blake
-
Michal Privoznik