On 08/02/2011 03:50 PM, Eric Blake wrote:
On 08/02/2011 03:46 PM, Eric Blake wrote:
> Quite a few leaks detected by coverity. For chr, the leaks were
> close enough to the allocations to plug in place; for disk, the
> leaks were separated from the allocation by enough other lines with
> intermediate failure cases that I refactored the cleanup instead.
>
> * src/qemu/qemu_command.c (qemuParseCommandLine): Plug leaks.
> ---
>
> v2: address review comments from v1
squash this in too (serves me right for hitting send prior to 'make
check' completing).
Yet more to squash in.
diff --git i/src/qemu/qemu_command.c w/src/qemu/qemu_command.c
index 067e53e..76df0aa 100644
--- i/src/qemu/qemu_command.c
+++ w/src/qemu/qemu_command.c
@@ -6226,18 +6226,14 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr
caps,
}
if (!(disk->src || disk->nhosts > 0) ||
- !disk->dst) {
- virDomainDiskDefFree(disk);
+ !disk->dst)
goto no_memory;
- }
if (virDomainDiskDefAssignAddress(caps, disk) < 0)
goto error;
- if (VIR_REALLOC_N(def->disks, def->ndisks+1) < 0) {
- virDomainDiskDefFree(disk);
+ if (VIR_REALLOC_N(def->disks, def->ndisks+1) < 0)
goto no_memory;
- }
def->disks[def->ndisks++] = disk;
disk = NULL;
} else if (STREQ(arg, "-no-acpi")) {
@@ -6361,24 +6357,17 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr
caps,
if (VIR_ALLOC(disk) < 0)
goto no_memory;
disk->src = strdup(val + strlen("disk:"));
- if (!disk->src) {
- virDomainDiskDefFree(disk);
+ if (!disk->src)
goto no_memory;
- }
if (STRPREFIX(disk->src, "/dev/"))
disk->type = VIR_DOMAIN_DISK_TYPE_BLOCK;
else
disk->type = VIR_DOMAIN_DISK_TYPE_FILE;
disk->device = VIR_DOMAIN_DISK_DEVICE_DISK;
disk->bus = VIR_DOMAIN_DISK_BUS_USB;
- if (!(disk->dst = strdup("sda"))) {
- virDomainDiskDefFree(disk);
+ if (!(disk->dst = strdup("sda")) ||
+ VIR_REALLOC_N(def->disks, def->ndisks+1) < 0)
goto no_memory;
- }
- if (VIR_REALLOC_N(def->disks, def->ndisks+1) < 0) {
- virDomainDiskDefFree(disk);
- goto no_memory;
- }
def->disks[def->ndisks++] = disk;
disk = NULL;
} else {
@@ -6407,10 +6396,8 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
WANT_VALUE();
if (!(disk = qemuParseCommandLineDisk(caps, val,
nvirtiodisk)))
goto error;
- if (VIR_REALLOC_N(def->disks, def->ndisks+1) < 0) {
- virDomainDiskDefFree(disk);
+ if (VIR_REALLOC_N(def->disks, def->ndisks+1) < 0)
goto no_memory;
- }
if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)
nvirtiodisk++;
@@ -6682,7 +6669,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
no_memory:
virReportOOMError();
error:
- VIR_FREE(disk);
+ virDomainDiskDefFree(disk);
VIR_FREE(cmd);
virDomainDefFree(def);
VIR_FREE(nics);
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org