OSDN Git Service

qcow2: Catch !*host_offset for data allocation
authorMax Reitz <mreitz@redhat.com>
Thu, 7 Aug 2014 20:47:53 +0000 (22:47 +0200)
committerKevin Wolf <kwolf@redhat.com>
Fri, 15 Aug 2014 13:07:16 +0000 (15:07 +0200)
commitff52aab2df5c5e10f231481961b88d25a3021724
treeb24f6ced7bcb579ee45bb907523f0efbbe4c565a
parent8fcffa9853473ab148d36858f15c5531161a1824
qcow2: Catch !*host_offset for data allocation

qcow2_alloc_cluster_offset() uses host_offset == 0 as "no preferred
offset" for the (data) cluster range to be allocated. However, this
offset is actually valid and may be allocated on images with a corrupted
refcount table or first refcount block.

In this case, the corruption prevention should normally catch that
write anyway (because it would overwrite the image header). But since 0
is a special value here, the function assumes that nothing has been
allocated at all which it asserts against.

Because this condition is not qemu's fault but rather that of a broken
image, it shouldn't throw an assertion but rather mark the image corrupt
and show an appropriate message, which this patch does by calling the
corruption check earlier than it would be called normally (before the
assertion).

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