[dpdk-dev] [PATCH v4 05/12] vhost: check the virtqueue address's validity
Ouyang Changchun
changchun.ouyang at intel.com
Wed Aug 12 10:02:40 CEST 2015
This is added since v3.
Check the virtqueue address's validity.
Signed-off-by: Changchun Ouyang <changchun.ouyang at intel.com>
---
Changes in v4:
- remove unnecessary code
lib/librte_vhost/vhost_user/vhost-net-user.c | 4 +++-
lib/librte_vhost/virtio-net.c | 10 ++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/lib/librte_vhost/vhost_user/vhost-net-user.c b/lib/librte_vhost/vhost_user/vhost-net-user.c
index 3d7c373..e926ed7 100644
--- a/lib/librte_vhost/vhost_user/vhost-net-user.c
+++ b/lib/librte_vhost/vhost_user/vhost-net-user.c
@@ -403,7 +403,9 @@ vserver_message_handler(int connfd, void *dat, int *remove)
ops->set_vring_num(ctx, &msg.payload.state);
break;
case VHOST_USER_SET_VRING_ADDR:
- ops->set_vring_addr(ctx, &msg.payload.addr);
+ if (ops->set_vring_addr(ctx, &msg.payload.addr) != 0)
+ RTE_LOG(INFO, VHOST_CONFIG,
+ "vring address incorrect.\n");
break;
case VHOST_USER_SET_VRING_BASE:
ops->set_vring_base(ctx, &msg.payload.state);
diff --git a/lib/librte_vhost/virtio-net.c b/lib/librte_vhost/virtio-net.c
index fd66a06..8901aa5 100644
--- a/lib/librte_vhost/virtio-net.c
+++ b/lib/librte_vhost/virtio-net.c
@@ -643,6 +643,7 @@ set_vring_addr(struct vhost_device_ctx ctx, struct vhost_vring_addr *addr)
{
struct virtio_net *dev;
struct vhost_virtqueue *vq;
+ uint32_t i;
dev = get_device(ctx);
if (dev == NULL)
@@ -673,6 +674,15 @@ set_vring_addr(struct vhost_device_ctx ctx, struct vhost_vring_addr *addr)
return -1;
}
+ for (i = vq->last_used_idx; i < vq->avail->idx; i++)
+ if (vq->avail->ring[i] >= vq->size) {
+ RTE_LOG(ERR, VHOST_CONFIG, "%s (%"PRIu64"):"
+ "Please check virt queue pair idx:%d is "
+ "enalbed correctly on guest.\n", __func__,
+ dev->device_fh, addr->index / VIRTIO_QNUM);
+ return -1;
+ }
+
vq->used = (struct vring_used *)(uintptr_t)qva_to_vva(dev,
addr->index / VIRTIO_QNUM, addr->used_user_addr);
if (vq->used == 0) {
--
1.8.4.2
More information about the dev
mailing list