virtio-blk: fail unaligned requests
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
@@ -290,6 +290,10 @@ static void virtio_blk_handle_write(Virtvirtio_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(VirtIvirtio_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,
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.Reported-by Conor Murphy <[email protected]>Tested-by Conor Murphy <[email protected]>Signed-off-by Christoph Hellwig <[email protected]>
Kevin Wolf
AppliedAm 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.Reported-by Conor Murphy <[email protected]>Tested-by Conor Murphy <[email protected]>Signed-off-by Christoph Hellwig <[email protected]>
Thanks, applied to the block branch.
Kevin