From: Wei Hu (Xavier) Date: Mon, 24 Aug 2020 11:01:30 +0000 (+0800) Subject: ethdev: check if queue setup when getting queue info X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=ba2fb4f022fc29b838a64778e520c32ea724ccdc;p=dpdk.git ethdev: check if queue setup when getting queue info This patch adds checking whether the related Tx or Rx queue has been setup in the rte_eth_rx_queue_info_get and rte_eth_tx_queue_info_get API function to avoid illegal address access. Signed-off-by: Wei Hu (Xavier) Reviewed-by: Ferruh Yigit --- diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 7858ad5f11..f8d63c7e17 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -4670,6 +4670,14 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id, return -EINVAL; } + if (dev->data->rx_queues[queue_id] == NULL) { + RTE_ETHDEV_LOG(ERR, + "Rx queue %"PRIu16" of device with port_id=%" + PRIu16" has not been setup\n", + queue_id, port_id); + return -EINVAL; + } + if (rte_eth_dev_is_rx_hairpin_queue(dev, queue_id)) { RTE_ETHDEV_LOG(INFO, "Can't get hairpin Rx queue %"PRIu16" info of device with port_id=%"PRIu16"\n", @@ -4701,6 +4709,14 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, return -EINVAL; } + if (dev->data->tx_queues[queue_id] == NULL) { + RTE_ETHDEV_LOG(ERR, + "Tx queue %"PRIu16" of device with port_id=%" + PRIu16" has not been setup\n", + queue_id, port_id); + return -EINVAL; + } + if (rte_eth_dev_is_tx_hairpin_queue(dev, queue_id)) { RTE_ETHDEV_LOG(INFO, "Can't get hairpin Tx queue %"PRIu16" info of device with port_id=%"PRIu16"\n",