DPDK patches and discussions
 help / color / mirror / Atom feed
From: Tetsuya Mukawa <mukawa@igel.co.jp>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH] pcap, af_packet, null: Fix memory leaks of 'struct rte_kvargs'
Date: Tue, 17 Mar 2015 12:53:42 +0900	[thread overview]
Message-ID: <5507A546.4050307@igel.co.jp> (raw)
In-Reply-To: <20150316104710.GA16238@hmsreliant.think-freely.org>

On 2015/03/16 19:47, Neil Horman wrote:
> On Mon, Mar 16, 2015 at 12:42:56PM +0900, Tetsuya Mukawa wrote:
>> '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
>>  - af_packet PMD
>>  - null PMD
>>
>> Reported-by: Mcnamara, John <john.mcnamara@intel.com>
>> Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
> Typically, you should limit your goto tags to something more minimalist that
> describes the one thing you want to unwind at the label.  As it stands here,  if
> somone wants to add some code after this label, the label either becomes
> incorrect, or you need to fix up the label name to match.  But I suppose that
> can be corrected later.

Hi Neil,

I appreciate for your suggestion.
I will need to remove af_packet fixing and submit the patch again.
So I will follow your suggestion in the next patch.

Thanks,
Tetsuya

> Acked-by: Neil Horman <nhorman@tuxdriver.com>
>
>
>> ---
>>  lib/librte_pmd_af_packet/rte_eth_af_packet.c |  5 ++++-
>>  lib/librte_pmd_null/rte_eth_null.c           | 13 +++++++++----
>>  lib/librte_pmd_pcap/rte_eth_pcap.c           | 18 +++++++++++-------
>>  3 files changed, 24 insertions(+), 12 deletions(-)
>>
>> diff --git a/lib/librte_pmd_af_packet/rte_eth_af_packet.c b/lib/librte_pmd_af_packet/rte_eth_af_packet.c
>> index 80e9bdf..7c3c6a9 100644
>> --- a/lib/librte_pmd_af_packet/rte_eth_af_packet.c
>> +++ b/lib/librte_pmd_af_packet/rte_eth_af_packet.c
>> @@ -823,12 +823,15 @@ rte_pmd_af_packet_devinit(const char *name, const char *params)
>>  		ret = rte_kvargs_process(kvlist, ETH_AF_PACKET_IFACE_ARG,
>>  		                         &open_packet_iface, &sockfd);
>>  		if (ret < 0)
>> -			return -1;
>> +			goto free_kvlist_then_return;
>>  	}
>>  
>>  	ret = rte_eth_from_packet(name, &sockfd, numa_node, kvlist);
>>  	close(sockfd); /* no longer needed */
>>  
>> +free_kvlist_then_return:
>> +	rte_kvargs_free(kvlist);
>> +
>>  	if (ret < 0)
>>  		return -1;
>>  
>> diff --git a/lib/librte_pmd_null/rte_eth_null.c b/lib/librte_pmd_null/rte_eth_null.c
>> index f49d686..86307eb 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_then_return;
>>  		}
>>  
>>  		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_then_return;
>>  		}
>>  	}
>>  
>> @@ -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_then_return:
>> +	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..de15fb3 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_then_return;
>>  		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_then_return;
>>  	}
>>  
>>  	/*
>> @@ -911,7 +912,7 @@ rte_pmd_pcap_devinit(const char *name, const char *params)
>>  	}
>>  
>>  	if (ret < 0)
>> -		return -1;
>> +		goto free_kvlist_then_return;
>>  
>>  	/*
>>  	 * 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_then_return;
>>  
>>  	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_then_return:
>> +	rte_kvargs_free(kvlist);
>> +	return ret;
>>  }
>>  
>>  static int
>> -- 
>> 1.9.1
>>
>>

  reply	other threads:[~2015-03-17  3:53 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-16  3:42 Tetsuya Mukawa
2015-03-16 10:47 ` Neil Horman
2015-03-17  3:53   ` Tetsuya Mukawa [this message]
2015-03-16 11:07 ` Mcnamara, John
2015-03-17  3:54   ` Tetsuya Mukawa
2015-03-17  4:12 ` [dpdk-dev] [PATCH v2] pcap, " Tetsuya Mukawa
2015-03-17 21:58   ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5507A546.4050307@igel.co.jp \
    --to=mukawa@igel.co.jp \
    --cc=dev@dpdk.org \
    --cc=nhorman@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).