[libvirt] [PATCH] storage: avoid null deref on qemu-img failure
Eric Blake
eblake at redhat.com
Wed Oct 26 16:59:30 UTC 2011
On 10/21/2011 04:17 PM, Peter Krempa wrote:
> Dňa 21.10.2011 23:39, Eric Blake wrote / napísal(a):
>> Detected by Coverity. Only possible if qemu-img gives bogus output,
>> but we might as well be robust.
>>
>> * src/storage/storage_backend.c
>> (virStorageBackendQEMUImgBackingFormat): Check for strstr failure.
>> ---
>> - start = strstr(help, " create ");
>> - end = strstr(start, "\n");
>> + if ((start = strstr(help, " create ")) == NULL ||
>> + (end = strstr(start, "\n")) == NULL)
>> + goto cleanup;
>
> At least one call graph to this function does not contain adding a error
> message of any kind. I think it would be fair to inform the user if his
> qemu-img is somehow broken (although unlikely to happen), if we check
> for this now.
I squashed this in:
diff --git i/src/storage/storage_backend.c w/src/storage/storage_backend.c
index 7c8bfdc..93c98d6 100644
--- i/src/storage/storage_backend.c
+++ w/src/storage/storage_backend.c
@@ -632,8 +632,12 @@ static int
virStorageBackendQEMUImgBackingFormat(const char *qemuimg)
goto cleanup;
if ((start = strstr(help, " create ")) == NULL ||
- (end = strstr(start, "\n")) == NULL)
+ (end = strstr(start, "\n")) == NULL) {
+ virStorageReportError(VIR_ERR_INTERNAL_ERROR,
+ _("unable to parse qemu-img output '%s'"),
+ help);
goto cleanup;
+ }
if (((tmp = strstr(start, "-F fmt")) && tmp < end) ||
((tmp = strstr(start, "-F backing_fmt")) && tmp < end))
ret = QEMU_IMG_BACKING_FORMAT_FLAG;
> ACK,
and pushed. Thanks for the review.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list