summaryrefslogtreecommitdiffstats
path: root/hw/virtio-blk.c
diff options
context:
space:
mode:
authorMichael S. Tsirkin2011-05-05 15:39:47 +0200
committerMichael S. Tsirkin2011-05-05 15:39:47 +0200
commit5300f1a5487f67f0bde8ee1081b799108668cb1d (patch)
tree5274ff496f2665487736a4eec23bf76601e4da44 /hw/virtio-blk.c
parentCPUPhysMemoryClient: Pass guest physical address not region offset (diff)
parentNBD: Avoid leaking a couple of strings when the NBD device is closed (diff)
downloadqemu-5300f1a5487f67f0bde8ee1081b799108668cb1d.tar.gz
qemu-5300f1a5487f67f0bde8ee1081b799108668cb1d.tar.xz
qemu-5300f1a5487f67f0bde8ee1081b799108668cb1d.zip
Merge remote branch 'origin/master' into pci
Conflicts: exec.c
Diffstat (limited to 'hw/virtio-blk.c')
-rw-r--r--hw/virtio-blk.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index b14fb995e8..91e0394af9 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,