qcow2: Put cache reference in error case
authorKevin Wolf <kwolf@redhat.com>
Sat, 8 Feb 2014 16:44:59 +0000 (17:44 +0100)
committerKevin Wolf <kwolf@redhat.com>
Fri, 4 Apr 2014 15:10:08 +0000 (17:10 +0200)
When qcow2_get_cluster_offset() sees a zero cluster in a version 2
image, it (rightfully) returns an error. But in doing so it shouldn't
leak an L2 table cache reference.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
block/qcow2-cluster.c

index 60a6910b1e8cab89df6c9351e7e3c98091ba2323..331ab08022804e39117fd25ba4815dc75410eedf 100644 (file)
@@ -491,6 +491,7 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset,
         break;
     case QCOW2_CLUSTER_ZERO:
         if (s->qcow_version < 3) {
+            qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table);
             return -EIO;
         }
         c = count_contiguous_clusters(nb_clusters, s->cluster_size,