qcow2: Refuse to get unaligned offsets from cache
authorMax Reitz <mreitz@redhat.com>
Fri, 10 Nov 2017 20:31:11 +0000 (21:31 +0100)
committerMax Reitz <mreitz@redhat.com>
Fri, 17 Nov 2017 17:21:31 +0000 (18:21 +0100)
commit4efb1f7c612ff35badc8f8cbda78ac891fabf20a
tree5bb105e16e9493122bdbc8e26c41e680bb53fd27
parent23482f8a603a7fc591b770c94ff75651a7da88b2
qcow2: Refuse to get unaligned offsets from cache

Instead of using an assertion, it is better to emit a corruption event
here.  Checking all offsets for correct alignment can be tedious and it
is easily possible to forget to do so.  qcow2_cache_do_get() is a
function every L2 and refblock access has to go through, so this is a
good central point to add such a check.

And for good measure, let us also add an assertion that the offset is
non-zero.  Making this a corruption event is not feasible, because a
zero offset usually means something special (such as the cluster is
unused), so all callers should be checking this anyway.  If they do not,
it is their fault, hence the assertion here.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20171110203111.7666-6-mreitz@redhat.com
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
block/qcow2-cache.c
tests/qemu-iotests/060
tests/qemu-iotests/060.out