From: Gonglei <[email protected]>
Spotted by Coverity:
(3) Event alloc_fn: Storage is returned from allocation function
"qemu_blockalign(BlockDriverState *, size_t)". [details]
(4) Event var_assign: Assigning: "iov.iov_base" = storage returned from
"qemu_blockalign(bs, iov.iov_len)".
Also see events: [leaked_storage]
375 iov.iov_base = qemu_blockalign(bs, iov.iov_len);
376
377 qemu_iovec_init_external(&qiov, &iov, 1);
378
379 BLKDBG_EVENT(bs->file, BLKDBG_COW_READ);
380
(5) Event cond_true: Condition "!bs->drv", taking true branch
381 if (!bs->drv) {
(6) Event leaked_storage: Variable "iov" going out of scope leaks the storage
"iov.iov_base" points to.
Also see events: [alloc_fn][var_assign]
382 return -ENOMEDIUM;
383 }
Signed-off-by: Gonglei <[email protected]>
---
block/qcow2-cluster.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index 76d2bcf..4208dc0 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -379,7 +379,8 @@ static int coroutine_fn copy_sectors(BlockDriverState *bs,
BLKDBG_EVENT(bs->file, BLKDBG_COW_READ);
if (!bs->drv) {
- return -ENOMEDIUM;
+ ret = -ENOMEDIUM;
+ goto out;
}
/* Call .bdrv_co_readv() directly instead of using the public block-layer
--
1.7.12.4