rte_virtio: fix setting NEXT flag for the last chain descriptor

It was wrongly assumed that
each READ will contain at least
one iovec. This could potentially
corrupt the desc array.

Change-Id: I48ca7efbe4bea897e0ad16184452bddcf3daf49b
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/383009
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-10-18 19:55:27 +02:00 committed by Jim Harris
parent a922e9f302
commit 770dcb0006

View File

@ -433,7 +433,7 @@ virtqueue_enqueue_xmit(struct virtqueue *vq, struct virtio_req *req)
descs[idx].flags = VRING_DESC_F_NEXT;
idx = descs[idx].next;
if (req->is_write) {
if (req->is_write || req->iovcnt == 0) {
for (i = 0; i < req->iovcnt; i++) {
virtqueue_iov_to_desc(vq, idx, &iov[i]);
descs[idx].flags = VRING_DESC_F_NEXT;