[libvirt] [PATCH v2 06/12] qemu: fix bugs in blockstats
John Ferlan
jferlan at redhat.com
Wed Dec 17 11:57:32 UTC 2014
On 12/16/2014 06:53 PM, Eric Blake wrote:
> On 12/16/2014 06:17 AM, John Ferlan wrote:
>>
>> Ran the series through my local Coverity checker.... found one issue....
>>
>
>>> - format, NULL)))
>>> + if (format == VIR_STORAGE_FILE_RAW) {
>>> + disk->src->capacity = disk->src->physical;
>>> + } else if (!(meta = virStorageFileGetMetadataFromBuf(disk->src->path, buf,
>>> + len, format, NULL))) {
>>> goto endjob;
>>> - if (meta->capacity)
>>> - disk->src->capacity = meta->capacity;
>>> + disk->src->capacity = meta->capacity ? meta->capacity
>>> + : disk->src->physical;
>>
>> We'll never get to this line because of the goto endjob (which gets
>> propagated in next patch as goto cleanup).
>
> Here's what I re-wrote this to:
>
>
> if (format == VIR_STORAGE_FILE_RAW)
> src->capacity = src->physical;
> else if ((meta = virStorageFileGetMetadataFromBuf(disk->src->path, buf,
> len, format, NULL)))
> src->capacity = meta->capacity ? meta->capacity : src->physical;
> else
> goto endjob;
>
> I didn't see an explicit ACK on this patch, but as 7/12 is the same
> material just refactored, I'll go ahead and push the corrected form of
> this at the same time as that one.
>
Coverity complained this morning because there's a call to
virStorageFileGetMetadataFromBuf in the block just before this:
(18) Event alloc_fn: Storage is returned from allocation function "virStorageFileGetMetadataFromBuf". [details]
(19) Event var_assign: Assigning: "meta" = storage returned from "virStorageFileGetMetadataFromBuf(src->path, buf, len, format, NULL)".
(20) Event cond_false: Condition "!(meta = virStorageFileGetMetadataFromBuf(src->path, buf, len, format, NULL))", taking false branch
Also see events: [overwrite_var]
11119 if (!(meta = virStorageFileGetMetadataFromBuf(src->path, buf, len,
11120 format, NULL)))
(21) Event if_end: End of if statement
11121 goto cleanup;
(22) Event cond_false: Condition "format == VIR_STORAGE_FILE_RAW", taking false branch
11122 if (format == VIR_STORAGE_FILE_RAW)
11123 src->capacity = src->physical;
(23) Event overwrite_var: Overwriting "meta" in "meta = virStorageFileGetMetadataFromBuf(src->path, buf, len, format, NULL)" leaks the storage that "meta" points to.
Also see events: [alloc_fn][var_assign]
11124 else if ((meta = virStorageFileGetMetadataFromBuf(src->path, buf,
11125 len, format, NULL)))
11126 src->capacity = meta->capacity ? meta->capacity : src->physical;
11127 else
11128 goto cleanup;
11129
John
More information about the libvir-list
mailing list