Signed-off-by: Peter Lieven <p...@kamp.de> --- block.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
diff --git a/block.c b/block.c index 2c4a5de..fa4c34b 100644 --- a/block.c +++ b/block.c @@ -3215,6 +3215,13 @@ static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, return -EINVAL; } + if (bs->bl.max_transfer_length && nb_sectors > bs->bl.max_transfer_length) { + error_report("read of %d sectors at sector %ld exceeds device max" + " transfer length of %d sectors.", nb_sectors, sector_num, + bs->bl.max_transfer_length); + return -EINVAL; + } + return bdrv_co_do_preadv(bs, sector_num << BDRV_SECTOR_BITS, nb_sectors << BDRV_SECTOR_BITS, qiov, flags); } @@ -3507,6 +3514,13 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, return -EINVAL; } + if (bs->bl.max_transfer_length && nb_sectors > bs->bl.max_transfer_length) { + error_report("write of %d sectors at sector %ld exceeds device max" + " transfer length of %d sectors.", nb_sectors, sector_num, + bs->bl.max_transfer_length); + return -EINVAL; + } + return bdrv_co_do_pwritev(bs, sector_num << BDRV_SECTOR_BITS, nb_sectors << BDRV_SECTOR_BITS, qiov, flags); } -- 1.7.9.5