[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 15/15] virtio-blk: fail unaligned requests
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 15/15] virtio-blk: fail unaligned requests |
Date: |
Thu, 7 Apr 2011 16:49:24 +0200 |
From: Christoph Hellwig <address@hidden>
Like all block drivers virtio-blk should not allow small than block size
granularity access. But given that the protocol specifies a
byte unit length field we currently accept such requests, which cause
qemu to abort() in lower layers. Add checks to the main read and
write handlers to catch them early.
Reported-by: Conor Murphy <address@hidden>
Tested-by: Conor Murphy <address@hidden>
Signed-off-by: Christoph Hellwig <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
hw/virtio-blk.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index b14fb99..91e0394 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -290,6 +290,10 @@ static void virtio_blk_handle_write(VirtIOBlockReq *req,
MultiReqBuffer *mrb)
virtio_blk_rw_complete(req, -EIO);
return;
}
+ if (req->qiov.size % req->dev->conf->logical_block_size) {
+ virtio_blk_rw_complete(req, -EIO);
+ return;
+ }
if (mrb->num_writes == 32) {
virtio_submit_multiwrite(req->dev->bs, mrb);
@@ -317,6 +321,10 @@ static void virtio_blk_handle_read(VirtIOBlockReq *req)
virtio_blk_rw_complete(req, -EIO);
return;
}
+ if (req->qiov.size % req->dev->conf->logical_block_size) {
+ virtio_blk_rw_complete(req, -EIO);
+ return;
+ }
acb = bdrv_aio_readv(req->dev->bs, sector, &req->qiov,
req->qiov.size / BDRV_SECTOR_SIZE,
--
1.7.2.3
- [Qemu-devel] [PATCH 05/15] qemu-img: Initial progress printing support, (continued)
- [Qemu-devel] [PATCH 05/15] qemu-img: Initial progress printing support, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 06/15] qemu-img rebase: Fix segfault if backing file can't be opened, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 07/15] exit if -drive specified is invalid instead of ignoring the "wrong" -drive, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 08/15] ide: consolidate drive_get(IF_IDE), Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 10/15] Set errno=ENOTSUP for attempts to use UNIX sockets on Windows platforms, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 12/15] NBD device: Separate out parsing configuration and opening sockets., Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 14/15] Fix integer overflow in block migration bandwidth calculation, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 11/15] NBD: Use qemu_socket functions to open TCP and UNIX sockets, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 13/15] floppy: save and restore DIR register, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 09/15] NBD library: whitespace changes, Kevin Wolf, 2011/04/07
- [Qemu-devel] [PATCH 15/15] virtio-blk: fail unaligned requests,
Kevin Wolf <=
- Re: [Qemu-devel] [PULL 00/15] Block patches, Anthony Liguori, 2011/04/07