From 9e71668b42bd8af7f7cb12b2e8fb708c9c7a3aa5 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Mon, 25 May 2015 12:20:52 +0200 Subject: [PATCH] virtio: fix crash if CQ is not negotiated Fix NULL dereference if virtio control queue is not negotiated. Signed-off-by: Damjan Marion Acked-by: Stephen Hemminger --- drivers/net/virtio/virtio_ethdev.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index a71aaa0011..fe5f9a15ab 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -114,19 +114,20 @@ static int virtio_send_command(struct virtqueue *vq, struct virtio_pmd_ctrl *ctrl, int *dlen, int pkt_num) { - uint16_t head = vq->vq_desc_head_idx, i; + uint32_t head, i; int k, sum = 0; virtio_net_ctrl_ack status = ~0; struct virtio_pmd_ctrl result; ctrl->status = status; - if (!vq->hw->cvq) { + if (!(vq && vq->hw->cvq)) { PMD_INIT_LOG(ERR, "%s(): Control queue is not supported.", __func__); return -1; } + head = vq->vq_desc_head_idx; PMD_INIT_LOG(DEBUG, "vq->vq_desc_head_idx = %d, status = %d, " "vq->hw->cvq = %p vq = %p", -- 2.20.1