This fixes a bug reported on https://bugs.launchpad.net/qemu/+bug/1850000. The problem is that QCOW2_COMPRESSED_SECTOR_MASK is a 32-bit mask when it really needs to be a 64-bit mask.
The launchpad report mentions only problems with qemu-img check on large compressed images, but I think it might extend further than that: - I suppose qcow2_free_any_clusters() would free every compressed offset modulo 4G, which isn’t good - qcow2_update_snapshot_refcount() will probably update compressed cluster’s refcounts (in snapshots) modulo 4G, which also isn’t good - And then we have check_refcount_l2() which updates the wrong clusters for qemu-img check (as demonstrated in the bug report) - (qcow2_co_preadv_compressed() is safe because it uses the inverted mask, which of course is again just 32 bit) But I haven’t tested those other cases. Max Reitz (2): qcow2: Fix QCOW2_COMPRESSED_SECTOR_MASK iotests: Add test for 4G+ compressed qcow2 write block/qcow2.h | 2 +- tests/qemu-iotests/272 | 79 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/272.out | 10 +++++ tests/qemu-iotests/group | 1 + 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100755 tests/qemu-iotests/272 create mode 100644 tests/qemu-iotests/272.out -- 2.21.0