From: Peter Krempa Date: Mon, 18 Sep 2017 14:03:58 +0000 (+0200) Subject: qemu: blockPeek: Fix filling of the return buffer X-Git-Tag: v3.8.0-rc1~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f767d53dbe484f33d71c173b3fa890515a91103b;p=thirdparty%2Flibvirt.git qemu: blockPeek: Fix filling of the return buffer 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 --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e1a0dd553e..3109f8a170 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); @@ -11441,15 +11442,18 @@ qemuDomainBlockPeek(virDomainPtr dom, if (qemuDomainStorageFileInit(driver, vm, disk->src) < 0) goto cleanup; - if (virStorageFileRead(disk->src, offset, size, buffer) < 0) + if (virStorageFileRead(disk->src, offset, size, &tmpbuf) < 0) goto cleanup; + memcpy(buffer, tmpbuf, size); + ret = 0; cleanup: if (disk) virStorageFileDeinit(disk->src); virDomainObjEndAPI(&vm); + VIR_FREE(tmpbuf); return ret; }