qcow2: Forbid discard in qcow2 v2 images with backing files
commit80f5c01183597b075157eb7bedbcb8691f8fa1d1
authorAlberto Garcia <berto@igalia.com>
Tue, 31 Mar 2020 11:43:45 +0000 (31 13:43 +0200)
committerMax Reitz <mreitz@redhat.com>
Tue, 7 Apr 2020 11:51:09 +0000 (7 13:51 +0200)
treee1716cf4029012456fe1a8acb64de45302e26a12
parent53ef8a92eb04ee19640f5aad3bff36cd4a36c250
qcow2: Forbid discard in qcow2 v2 images with backing files

A discard request deallocates the selected clusters so they read back
as zeroes. This is done by clearing the cluster offset field and
setting QCOW_OFLAG_ZERO in the L2 entry.

This flag is however only supported when qcow_version >= 3. In older
images the cluster is simply deallocated, exposing any possible stale
data from the backing file.

Since discard is an advisory operation it's safer to simply forbid it
in this scenario.

Note that we are adding this check to qcow2_co_pdiscard() and not to
qcow2_cluster_discard() or discard_in_l2_slice() because the last
two are also used by qcow2_snapshot_create() to discard the clusters
used by the VM state. In this case there's no risk of exposing stale
data to the guest and we really want that the clusters are always
discarded.

Signed-off-by: Alberto Garcia <berto@igalia.com>
Message-Id: <20200331114345.29993-1-berto@igalia.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
block/qcow2.c
tests/qemu-iotests/046
tests/qemu-iotests/046.out
tests/qemu-iotests/060
tests/qemu-iotests/060.out
tests/qemu-iotests/177
tests/qemu-iotests/290 [new file with mode: 0755]
tests/qemu-iotests/290.out [new file with mode: 0644]
tests/qemu-iotests/group