1 | The following changes since commit 61c265f0660ee476985808c8aa7915617c44fd53: | 1 | The following changes since commit ea9cdbcf3a0b8d5497cddf87990f1b39d8f3bb0a: |
---|---|---|---|
2 | 2 | ||
3 | Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20200313a' into staging (2020-03-13 10:33:04 +0000) | 3 | Merge tag 'hw-misc-20240913' of https://github.com/philmd/qemu into staging (2024-09-15 18:27:40 +0100) |
4 | 4 | ||
5 | are available in the Git repository at: | 5 | are available in the Git repository at: |
6 | 6 | ||
7 | https://github.com/stefanha/qemu.git tags/block-pull-request | 7 | https://gitlab.com/stefanha/qemu.git tags/block-pull-request |
8 | 8 | ||
9 | for you to fetch changes up to 4ab78b19189a81038e744728ed949d09aa477550: | 9 | for you to fetch changes up to 89cd6254b80784a1b3f574407192493ef92fe65f: |
10 | 10 | ||
11 | block/io: fix bdrv_co_do_copy_on_readv (2020-03-16 11:46:11 +0000) | 11 | hw/block: fix uint32 overflow (2024-09-17 12:12:30 +0200) |
12 | 12 | ||
13 | ---------------------------------------------------------------- | 13 | ---------------------------------------------------------------- |
14 | Pull request | 14 | Pull request |
15 | 15 | ||
16 | An integer overflow fix for the last zone on a zoned block device whose | ||
17 | capacity is not a multiple of the zone size. | ||
18 | |||
16 | ---------------------------------------------------------------- | 19 | ---------------------------------------------------------------- |
17 | 20 | ||
18 | Vladimir Sementsov-Ogievskiy (1): | 21 | Dmitry Frolov (1): |
19 | block/io: fix bdrv_co_do_copy_on_readv | 22 | hw/block: fix uint32 overflow |
20 | 23 | ||
21 | block/io.c | 2 +- | 24 | hw/block/virtio-blk.c | 2 +- |
22 | 1 file changed, 1 insertion(+), 1 deletion(-) | 25 | 1 file changed, 1 insertion(+), 1 deletion(-) |
23 | 26 | ||
24 | -- | 27 | -- |
25 | 2.24.1 | 28 | 2.46.0 |
26 | diff view generated by jsdifflib |
1 | From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> | 1 | From: Dmitry Frolov <frolov@swemel.ru> |
---|---|---|---|
2 | 2 | ||
3 | Prior to 1143ec5ebf4 it was OK to qemu_iovec_from_buf() from aligned-up | 3 | The product bs->bl.zone_size * (bs->bl.nr_zones - 1) may overflow |
4 | buffer to original qiov, as qemu_iovec_from_buf() will stop at qiov end | 4 | uint32. |
5 | anyway. | ||
6 | 5 | ||
7 | But after 1143ec5ebf4 we assume that bdrv_co_do_copy_on_readv works on | 6 | Found by Linux Verification Center (linuxtesting.org) with SVACE. |
8 | part of original qiov, defined by qiov_offset and bytes. So we must not | ||
9 | touch qiov behind qiov_offset+bytes bound. Fix it. | ||
10 | 7 | ||
11 | Cc: qemu-stable@nongnu.org # v4.2 | 8 | Signed-off-by: Dmitry Frolov <frolov@swemel.ru> |
12 | Fixes: 1143ec5ebf4 | 9 | Message-id: 20240917080356.270576-2-frolov@swemel.ru |
13 | Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> | ||
14 | Reviewed-by: John Snow <jsnow@redhat.com> | ||
15 | Message-id: 20200312081949.5350-1-vsementsov@virtuozzo.com | ||
16 | Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> | 10 | Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> |
17 | --- | 11 | --- |
18 | block/io.c | 2 +- | 12 | hw/block/virtio-blk.c | 2 +- |
19 | 1 file changed, 1 insertion(+), 1 deletion(-) | 13 | 1 file changed, 1 insertion(+), 1 deletion(-) |
20 | 14 | ||
21 | diff --git a/block/io.c b/block/io.c | 15 | diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c |
22 | index XXXXXXX..XXXXXXX 100644 | 16 | index XXXXXXX..XXXXXXX 100644 |
23 | --- a/block/io.c | 17 | --- a/hw/block/virtio-blk.c |
24 | +++ b/block/io.c | 18 | +++ b/hw/block/virtio-blk.c |
25 | @@ -XXX,XX +XXX,XX @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child, | 19 | @@ -XXX,XX +XXX,XX @@ static int virtio_blk_handle_zone_mgmt(VirtIOBlockReq *req, BlockZoneOp op) |
26 | if (!(flags & BDRV_REQ_PREFETCH)) { | 20 | } else { |
27 | qemu_iovec_from_buf(qiov, qiov_offset + progress, | 21 | if (bs->bl.zone_size > capacity - offset) { |
28 | bounce_buffer + skip_bytes, | 22 | /* The zoned device allows the last smaller zone. */ |
29 | - pnum - skip_bytes); | 23 | - len = capacity - bs->bl.zone_size * (bs->bl.nr_zones - 1); |
30 | + MIN(pnum - skip_bytes, bytes - progress)); | 24 | + len = capacity - bs->bl.zone_size * (bs->bl.nr_zones - 1ull); |
31 | } | 25 | } else { |
32 | } else if (!(flags & BDRV_REQ_PREFETCH)) { | 26 | len = bs->bl.zone_size; |
33 | /* Read directly into the destination */ | 27 | } |
34 | -- | 28 | -- |
35 | 2.24.1 | 29 | 2.46.0 |
36 | diff view generated by jsdifflib |