[PATCH 0/3] qcow2: Fix alloc_cluster_abort() for pre-existing clusters

Max Reitz posted 3 patches 5 years, 8 months ago
Test docker-quick@centos7 failed
Test FreeBSD passed
Test docker-mingw@fedora failed
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200225143130.111267-1-mreitz@redhat.com
Maintainers: Max Reitz <mreitz@redhat.com>, Kevin Wolf <kwolf@redhat.com>
block/qcow2-cluster.c              |  2 +-
tests/qemu-iotests/026             | 53 ++++++++++++++++++++++++++++++
tests/qemu-iotests/026.out         | 16 +++++++++
tests/qemu-iotests/026.out.nocache | 16 +++++++++
4 files changed, 86 insertions(+), 1 deletion(-)
[PATCH 0/3] qcow2: Fix alloc_cluster_abort() for pre-existing clusters
Posted by Max Reitz 5 years, 8 months ago
Hi,

With c3b6658c1a5a3fb2, Kevin has fixed a case in alloc_cluster_abort()
where we used to free a cluster that wasn’t even allocated by
handle_alloc(), thus leading to an error and/or corruption.  Besides
external data files, there is another case where alloc_cluster_abort()
must not free the “new” cluster: Namely when the cluster isn’t new
because we’re reusing an existing pre-allocated zero cluster.

I think Berto’s subcluster series fixes this, too, but it’s still an
RFC, so I suppose we have to fix the bug independently of it.

Patch 2 adds a regression test; patch 3 adds a regression test for
Kevin’s patch c3b6658c1a5a3fb2 (which didn’t come with one).


Max Reitz (3):
  qcow2: Fix alloc_cluster_abort() for pre-existing clusters
  iotests/026: Test EIO on preallocated zero cluster
  iotests/026: Test EIO on allocation in a data-file

 block/qcow2-cluster.c              |  2 +-
 tests/qemu-iotests/026             | 53 ++++++++++++++++++++++++++++++
 tests/qemu-iotests/026.out         | 16 +++++++++
 tests/qemu-iotests/026.out.nocache | 16 +++++++++
 4 files changed, 86 insertions(+), 1 deletion(-)

-- 
2.24.1


Re: [PATCH 0/3] qcow2: Fix alloc_cluster_abort() for pre-existing clusters
Posted by Kevin Wolf 5 years, 8 months ago
Am 25.02.2020 um 15:31 hat Max Reitz geschrieben:
> With c3b6658c1a5a3fb2, Kevin has fixed a case in alloc_cluster_abort()
> where we used to free a cluster that wasn’t even allocated by
> handle_alloc(), thus leading to an error and/or corruption.  Besides
> external data files, there is another case where alloc_cluster_abort()
> must not free the “new” cluster: Namely when the cluster isn’t new
> because we’re reusing an existing pre-allocated zero cluster.
> 
> I think Berto’s subcluster series fixes this, too, but it’s still an
> RFC, so I suppose we have to fix the bug independently of it.
> 
> Patch 2 adds a regression test; patch 3 adds a regression test for
> Kevin’s patch c3b6658c1a5a3fb2 (which didn’t come with one).

Thanks, applied to the block branch.

Kevin