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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list