[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