From patchwork Tue Mar 17 04:12:41 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tetsuya Mukawa X-Patchwork-Id: 4028 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 9E74F5A8B; Tue, 17 Mar 2015 05:13:00 +0100 (CET) Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com [209.85.220.54]) by dpdk.org (Postfix) with ESMTP id 74C455938 for ; Tue, 17 Mar 2015 05:12:58 +0100 (CET) Received: by pagr17 with SMTP id r17so85144939pag.0 for ; Mon, 16 Mar 2015 21:12:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=LCD3d0sSQZQZ8pbGaseOjbJFYH4VuVyU+/1DFAQVhWg=; b=DChZ0wqBxu0zX4WRgES235z4/ErShMXAsgmDpQMMN22mDHPd2VVCuW9TbZnyBP20gb S4/SQYkMu61k2rpJ3R+P7j5PlrEo7hVBTnEK3RBKfDwanGfdvgMT37EIcs4KQ+/YI28e UL7YgsdCDz1BNBCYCG/aWwD+t34PD2Q7runOMNwmm4T09Et2ZeqlwLaA06tT0s/Zq/QM cNh7yNoMp8qqAVHKWwj2VrOPZruZnQQ3E3KPx/rssrn5lYyTpxbKo6ta9HeVp+EXdV/R Gmw+hybj+MrApOc0NRW4jykFnA68C7Q67lNvMECQBT1UytpS9UbFeuLpEC+pfsqpAIrp Zn4A== X-Gm-Message-State: ALoCoQnfJ5+ZrG4+5gxx3ytkhT0ysw3P+Ro/pOaiauT4IMipHCHNlxHwHykFYirSi17lFqb2cTx8 X-Received: by 10.70.54.130 with SMTP id j2mr123001049pdp.122.1426565577769; Mon, 16 Mar 2015 21:12:57 -0700 (PDT) Received: from localhost.localdomain (napt.igel.co.jp. [219.106.231.132]) by mx.google.com with ESMTPSA id n10sm19748380pdp.18.2015.03.16.21.12.55 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 16 Mar 2015 21:12:57 -0700 (PDT) From: Tetsuya Mukawa To: dev@dpdk.org Date: Tue, 17 Mar 2015 13:12:41 +0900 Message-Id: <1426565561-23051-1-git-send-email-mukawa@igel.co.jp> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1426477376-13385-1-git-send-email-mukawa@igel.co.jp> References: <1426477376-13385-1-git-send-email-mukawa@igel.co.jp> Subject: [dpdk-dev] [PATCH v2] pcap, null: Fix memory leaks of 'struct rte_kvargs' X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 'struct rte_kvargs' is allocated in rte_kvargs_parse(), and should be freed with rte_kvargs_free(). This patch fixes memory leaks of 'struct rte_kvargs' in below PMDs. - pcap PMD - null PMD Reported-by: Mcnamara, John Signed-off-by: Tetsuya Mukawa --- lib/librte_pmd_null/rte_eth_null.c | 13 +++++++++---- lib/librte_pmd_pcap/rte_eth_pcap.c | 18 +++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/lib/librte_pmd_null/rte_eth_null.c b/lib/librte_pmd_null/rte_eth_null.c index f49d686..8fe1a2d 100644 --- a/lib/librte_pmd_null/rte_eth_null.c +++ b/lib/librte_pmd_null/rte_eth_null.c @@ -506,7 +506,7 @@ rte_pmd_null_devinit(const char *name, const char *params) unsigned numa_node; unsigned packet_size = default_packet_size; unsigned packet_copy = default_packet_copy; - struct rte_kvargs *kvlist; + struct rte_kvargs *kvlist = NULL; int ret; if (name == NULL) @@ -527,7 +527,7 @@ rte_pmd_null_devinit(const char *name, const char *params) ETH_NULL_PACKET_SIZE_ARG, &get_packet_size_arg, &packet_size); if (ret < 0) - return -1; + goto free_kvlist; } if (rte_kvargs_count(kvlist, ETH_NULL_PACKET_COPY_ARG) == 1) { @@ -536,7 +536,7 @@ rte_pmd_null_devinit(const char *name, const char *params) ETH_NULL_PACKET_COPY_ARG, &get_packet_copy_arg, &packet_copy); if (ret < 0) - return -1; + goto free_kvlist; } } @@ -544,7 +544,12 @@ rte_pmd_null_devinit(const char *name, const char *params) "packet copy is %s\n", packet_size, packet_copy ? "enabled" : "disabled"); - return eth_dev_null_create(name, numa_node, packet_size, packet_copy); + ret = eth_dev_null_create(name, numa_node, packet_size, packet_copy); + +free_kvlist: + if (kvlist) + rte_kvargs_free(kvlist); + return ret; } static int diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c index 5e94930..204ae68 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.c +++ b/lib/librte_pmd_pcap/rte_eth_pcap.c @@ -888,12 +888,13 @@ rte_pmd_pcap_devinit(const char *name, const char *params) ret = rte_kvargs_process(kvlist, ETH_PCAP_IFACE_ARG, &open_rx_tx_iface, &pcaps); if (ret < 0) - return -1; + goto free_kvlist; dumpers.pcaps[0] = pcaps.pcaps[0]; dumpers.names[0] = pcaps.names[0]; dumpers.types[0] = pcaps.types[0]; - return rte_eth_from_pcaps(name, &pcaps, 1, &dumpers, 1, + ret = rte_eth_from_pcaps(name, &pcaps, 1, &dumpers, 1, numa_node, kvlist, 1); + goto free_kvlist; } /* @@ -911,7 +912,7 @@ rte_pmd_pcap_devinit(const char *name, const char *params) } if (ret < 0) - return -1; + goto free_kvlist; /* * We check whether we want to open a TX stream to a real NIC or a @@ -930,15 +931,18 @@ rte_pmd_pcap_devinit(const char *name, const char *params) } if (ret < 0) - return -1; + goto free_kvlist; if (using_dumpers) - return rte_eth_from_pcaps_n_dumpers(name, &pcaps, pcaps.num_of_rx, + ret = rte_eth_from_pcaps_n_dumpers(name, &pcaps, pcaps.num_of_rx, &dumpers, dumpers.num_of_tx, numa_node, kvlist); - - return rte_eth_from_pcaps(name, &pcaps, pcaps.num_of_rx, &dumpers, + else + ret = rte_eth_from_pcaps(name, &pcaps, pcaps.num_of_rx, &dumpers, dumpers.num_of_tx, numa_node, kvlist, 0); +free_kvlist: + rte_kvargs_free(kvlist); + return ret; } static int