From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CE4D6A2EDB for ; Tue, 1 Oct 2019 14:53:49 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EA6615B3E; Tue, 1 Oct 2019 14:53:43 +0200 (CEST) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 9C91D37B4; Tue, 1 Oct 2019 14:53:41 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EFE20300DA6E; Tue, 1 Oct 2019 12:53:40 +0000 (UTC) Received: from rh.redhat.com (unknown [10.36.118.72]) by smtp.corp.redhat.com (Postfix) with ESMTP id BB641100194E; Tue, 1 Oct 2019 12:53:39 +0000 (UTC) From: Kevin Traynor To: dev@dpdk.org Cc: Kevin Traynor , cian.ferriter@intel.com, stable@dpdk.org Date: Tue, 1 Oct 2019 13:53:07 +0100 Message-Id: <20191001125315.6191-2-ktraynor@redhat.com> In-Reply-To: <20191001125315.6191-1-ktraynor@redhat.com> References: <20191001125315.6191-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Tue, 01 Oct 2019 12:53:41 +0000 (UTC) Subject: [dpdk-dev] [PATCH 1/9] net/pcap: fix argument checks X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Previously rx/tx_queues were passed into eth_from_pcaps_common() as ptrs and were checked for being NULL. In commit da6ba28f0540 ("net/pcap: use a struct to pass user options") that changed to pass in a ptr to a pmd_devargs_all which contains the rx/tx_queues. The parameter checking was not updated as part of that commit and coverity caught that there was still a check if rx/tx_queues were NULL, apparently after they had been dereferenced. Fix that by checking the pmd_devargs_all ptr and removing the NULL checks on rx/tx_queues. 1231 struct pmd_devargs *rx_queues = &devargs_all->rx_queues; 1232 struct pmd_devargs *tx_queues = &devargs_all->tx_queues; 1233 const unsigned int nb_rx_queues = rx_queues->num_of_queue; deref_ptr: Directly dereferencing pointer tx_queues. 1234 const unsigned int nb_tx_queues = tx_queues->num_of_queue; 1235 unsigned int i; 1236 1237 /* do some parameter checking */ CID 345004: Dereference before null check (REVERSE_INULL) [select issue] 1238 if (rx_queues == NULL && nb_rx_queues > 0) 1239 return -1; CID 345029 (#1 of 1): Dereference before null check (REVERSE_INULL) check_after_deref: Null-checking tx_queues suggests that it may be null, but it has already been dereferenced on all paths leading to the check. 1240 if (tx_queues == NULL && nb_tx_queues > 0) 1241 return -1; Coverity issue: 345029 Coverity issue: 345044 Fixes: da6ba28f0540 ("net/pcap: use a struct to pass user options") Cc: cian.ferriter@intel.com Cc: stable@dpdk.org Signed-off-by: Kevin Traynor --- drivers/net/pcap/rte_eth_pcap.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 5489010b6..7cf00306e 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -1229,16 +1229,19 @@ eth_from_pcaps_common(struct rte_vdev_device *vdev, { struct pmd_process_private *pp; - struct pmd_devargs *rx_queues = &devargs_all->rx_queues; - struct pmd_devargs *tx_queues = &devargs_all->tx_queues; - const unsigned int nb_rx_queues = rx_queues->num_of_queue; - const unsigned int nb_tx_queues = tx_queues->num_of_queue; + struct pmd_devargs *rx_queues; + struct pmd_devargs *tx_queues; + unsigned int nb_rx_queues; + unsigned int nb_tx_queues; unsigned int i; - /* do some parameter checking */ - if (rx_queues == NULL && nb_rx_queues > 0) - return -1; - if (tx_queues == NULL && nb_tx_queues > 0) + if (devargs_all == NULL) return -1; + rx_queues = &devargs_all->rx_queues; + tx_queues = &devargs_all->tx_queues; + + nb_rx_queues = rx_queues->num_of_queue; + nb_tx_queues = tx_queues->num_of_queue; + if (pmd_init_internals(vdev, nb_rx_queues, nb_tx_queues, internals, eth_dev) < 0) -- 2.21.0