[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 3/5] qcow2: Check request size in qcow2_co_pwritev_compressed_part
From: |
Max Reitz |
Subject: |
[PULL 3/5] qcow2: Check request size in qcow2_co_pwritev_compressed_part() |
Date: |
Tue, 7 Apr 2020 14:37:25 +0200 |
From: Alberto Garcia <address@hidden>
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 <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Andrey Shinkevich <address@hidden>
Reviewed-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Signed-off-by: Max Reitz <address@hidden>
---
block/qcow2.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/block/qcow2.c b/block/qcow2.c
index e8cbcc1ec1..b524b0c53f 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -4355,6 +4355,11 @@ qcow2_co_pwritev_compressed_part(BlockDriverState *bs,
return -EINVAL;
}
+ if (offset_into_cluster(s, bytes) &&
+ (offset + bytes) != (bs->total_sectors << BDRV_SECTOR_BITS)) {
+ return -EINVAL;
+ }
+
while (bytes && aio_task_pool_status(aio) == 0) {
uint64_t chunk_size = MIN(bytes, s->cluster_size);
--
2.25.1
- [PULL 0/5] Block patches for 5.0-rc2, Max Reitz, 2020/04/07
- [PULL 2/5] qemu-img: Report convert errors by bytes, not sectors, Max Reitz, 2020/04/07
- [PULL 3/5] qcow2: Check request size in qcow2_co_pwritev_compressed_part(),
Max Reitz <=
- [PULL 1/5] qcow2: Forbid discard in qcow2 v2 images with backing files, Max Reitz, 2020/04/07
- [PULL 4/5] iotests/common.pattern: Quote echos, Max Reitz, 2020/04/07
- [PULL 5/5] xen-block: Fix double qlist remove and request leak, Max Reitz, 2020/04/07
- Re: [PULL 0/5] Block patches for 5.0-rc2, Peter Maydell, 2020/04/07