[libvirt] [PATCH v2 1/2] qemu: blockPeek: Fix filling of the return buffer

Peter Krempa pkrempa at redhat.com
Tue Sep 19 08:06:37 UTC 2017


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
---

v2: Actually fill 'tmpbuf' in call to virStorageFileRead


 src/qemu/qemu_driver.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e1a0dd553..3109f8a17 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;
 }

-- 
2.14.1




More information about the libvir-list mailing list