qcow2: Check request size in qcow2_co_pwritev_compressed_part()
commitfb43d2d46e0daa491d7d80683dd11bb7b2f5899e
authorAlberto Garcia <berto@igalia.com>
Mon, 6 Apr 2020 14:34:01 +0000 (6 16:34 +0200)
committerMax Reitz <mreitz@redhat.com>
Tue, 7 Apr 2020 11:51:09 +0000 (7 13:51 +0200)
treeab996ead09822894847f831873d0565b9cd70b94
parent39f77cb662c6a7c4c398ee568ebc0ebcd710d0c4
qcow2: Check request size in qcow2_co_pwritev_compressed_part()

When issuing a compressed write request the number of bytes must be a
multiple of the cluster size or reach the end of the last cluster.

With the current code such requests are allowed and we hit an
assertion:

   $ qemu-img create -f qcow2 img.qcow2 1M
   $ qemu-io -c 'write -c 0 32k' img.qcow2

   qemu-io: block/qcow2.c:4257: qcow2_co_pwritev_compressed_task:
   Assertion `bytes == s->cluster_size || (bytes < s->cluster_size &&
              (offset + bytes == bs->total_sectors << BDRV_SECTOR_BITS))' failed.
   Aborted

This patch fixes a regression introduced in 0d483dce38

Signed-off-by: Alberto Garcia <berto@igalia.com>
Message-Id: <20200406143401.26854-1-berto@igalia.com>
Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
block/qcow2.c