From: Andy Pei Date: Thu, 4 Jul 2019 01:38:39 +0000 (+0800) Subject: net/i40e: fix crash when TxQ/RxQ set to 0 in VF X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=343b8e4adabcfabe282b3fdb419e98f6f9cb0b35;p=dpdk.git net/i40e: fix crash when TxQ/RxQ set to 0 in VF Testpmd would stuck and result in core dump when user specifies an invalid VF queue number, for example when setting txq or rxq to 0. When txq or rxq is set to 0, pointer of pointer rxq or txq in function i40evf_configure_vsi_queues is NULL. The usage of txq[i] or rxq[0] is valid. This patch fixes this issue. Fixes: d6b19729093e ("i40evf: support configurable crc stripping") Cc: stable@dpdk.org Signed-off-by: Andy Pei Acked-by: Qi Zhang --- diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index d922a84792..5be32b069d 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -573,7 +573,7 @@ i40evf_fill_virtchnl_vsi_txq_info(struct virtchnl_txq_info *txq_info, { txq_info->vsi_id = vsi_id; txq_info->queue_id = queue_id; - if (queue_id < nb_txq) { + if (queue_id < nb_txq && txq) { txq_info->ring_len = txq->nb_tx_desc; txq_info->dma_ring_addr = txq->tx_ring_phys_addr; } @@ -590,7 +590,7 @@ i40evf_fill_virtchnl_vsi_rxq_info(struct virtchnl_rxq_info *rxq_info, rxq_info->vsi_id = vsi_id; rxq_info->queue_id = queue_id; rxq_info->max_pkt_size = max_pkt_size; - if (queue_id < nb_rxq) { + if (queue_id < nb_rxq && rxq) { rxq_info->ring_len = rxq->nb_rx_desc; rxq_info->dma_ring_addr = rxq->rx_ring_phys_addr; rxq_info->databuffer_size = @@ -623,10 +623,11 @@ i40evf_configure_vsi_queues(struct rte_eth_dev *dev) for (i = 0, vc_qpi = vc_vqci->qpair; i < nb_qp; i++, vc_qpi++) { i40evf_fill_virtchnl_vsi_txq_info(&vc_qpi->txq, - vc_vqci->vsi_id, i, dev->data->nb_tx_queues, txq[i]); + vc_vqci->vsi_id, i, dev->data->nb_tx_queues, + txq ? txq[i] : NULL); i40evf_fill_virtchnl_vsi_rxq_info(&vc_qpi->rxq, vc_vqci->vsi_id, i, dev->data->nb_rx_queues, - vf->max_pkt_len, rxq[i]); + vf->max_pkt_len, rxq ? rxq[i] : NULL); } memset(&args, 0, sizeof(args)); args.ops = VIRTCHNL_OP_CONFIG_VSI_QUEUES;