
On 09/18/2017 09:11 AM, Peter Krempa wrote:
Commit 3956af495e broke the blockPeek API since virStorageFileRead allocates a return buffer and fills it with the data, while the API fills a user-provided buffer. This did not get caught by the compiler since the API prototype uses a 'void *'.
Fix it by transferring the data from the allocated buffer to the user provided buffer.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1491217 --- src/qemu/qemu_driver.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e1a0dd553..93a1c6061 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -11415,6 +11415,7 @@ qemuDomainBlockPeek(virDomainPtr dom, virQEMUDriverPtr driver = dom->conn->privateData; virDomainDiskDefPtr disk = NULL; virDomainObjPtr vm; + char *tmpbuf = NULL; int ret = -1;
virCheckFlags(0, -1); @@ -11444,12 +11445,15 @@ qemuDomainBlockPeek(virDomainPtr dom, if (virStorageFileRead(disk->src, offset, size, buffer) < 0) goto cleanup;
+ memcpy(buffer, tmpbuf, size);
Umm, where is tmpbuf actually set to a non-null pointer? Shouldn't the virStorageFileRead() call also be updated? -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org