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?
Oh, I messed up splitting of the two changes in this series. I obviously
tested only both patches.