From: Prasad J Pandit Date: Wed, 27 Jul 2016 15:37:56 +0000 (+0530) Subject: virtio: check vring descriptor buffer length X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=1e7aed70144b4673fc26e73062064b6724795e5f;p=qemu.git virtio: check vring descriptor buffer length virtio back end uses set of buffers to facilitate I/O operations. An infinite loop unfolds in virtqueue_pop() if a buffer was of zero size. Add check to avoid it. Reported-by: Li Qiang Signed-off-by: Prasad J Pandit Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Stefan Hajnoczi --- diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 752b2715d0..b4d05110d2 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -458,6 +458,11 @@ static void virtqueue_map_desc(unsigned int *p_num_sg, hwaddr *addr, struct iove unsigned num_sg = *p_num_sg; assert(num_sg <= max_num_sg); + if (!sz) { + error_report("virtio: zero sized buffers are not allowed"); + exit(1); + } + while (sz) { hwaddr len = sz;