Skip to contentSkip to conversation

virtio-blk: fail unaligned requests

PATCH Applied Christoph Hellwig 3 participants 3 messages Apr 6, 2011 – Apr 7, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 virtio-blk: fail unaligned requests

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.

hw/virtio-blk.c +8 -0
Index: qemu/hw/virtio-blk.c
===================================================================
@@ -290,6 +290,10 @@ static void virtio_blk_handle_write(Virt
         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(VirtI
         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,
Reviewed-by on v1 1/1
#1 lore raw
Quoted 9 lines · Christoph Hellwig

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.

Applied
#2 lore raw
In reply to Christoph Hellwig

Am 06.04.2011 20:28, schrieb Christoph Hellwig:

Quoted 9 lines

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.

Thanks, applied to the block branch.

Kevin