From: Gonglei <arei.gong...@huawei.com> 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 <arei.gong...@huawei.com> --- 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