[dpdk-dev,v2] crypto: fix memory leak

Message ID 1468846036-228978-1-git-send-email-pablo.de.lara.guarch@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

De Lara Guarch, Pablo July 18, 2016, 12:47 p.m. UTC
  When parsing the parameters for virtual device initialization,
rte_kvargs structure was being freed only if there was an error,
not when parsing was successful.

Coverity issue: 124568

Fixes: f3e764fa2fb7 ("cryptodev: uninline parameter parsing")

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
---

Changes in v2:
- Initialize ret variable to 0 (success)

 lib/librte_cryptodev/rte_cryptodev.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
  

Comments

Pattan, Reshma July 18, 2016, 12:59 p.m. UTC | #1
> -----Original Message-----
> From: De Lara Guarch, Pablo
> Sent: Monday, July 18, 2016 1:47 PM
> To: dev@dpdk.org
> Cc: Doherty, Declan <declan.doherty@intel.com>; Pattan, Reshma
> <reshma.pattan@intel.com>; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>
> Subject: [PATCH v2] crypto: fix memory leak
> 
> When parsing the parameters for virtual device initialization, rte_kvargs
> structure was being freed only if there was an error, not when parsing was
> successful.
> 
> Coverity issue: 124568
> 
> Fixes: f3e764fa2fb7 ("cryptodev: uninline parameter parsing")
> 
> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>

Acked-by: Reshma Pattan <reshma.pattan@intel.com>
  
John McNamara July 18, 2016, 1 p.m. UTC | #2
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pablo de Lara
> Sent: Monday, July 18, 2016 1:47 PM
> To: dev@dpdk.org
> Cc: Doherty, Declan <declan.doherty@intel.com>; Pattan, Reshma
> <reshma.pattan@intel.com>; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>
> Subject: [dpdk-dev] [PATCH v2] crypto: fix memory leak
>
> ...
>
>  free_kvlist:
> -	rte_kvargs_free(kvlist);
> +	if (kvlist != NULL)
> +		rte_kvargs_free(kvlist);
>  	return ret;

The test against NULL isn't required, that is done in rte_kvargs_free() anyway.
  

Patch

diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 20e5beb..db809d8 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -148,8 +148,8 @@  int
 rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
 		const char *input_args)
 {
-	struct rte_kvargs *kvlist;
-	int ret;
+	struct rte_kvargs *kvlist = NULL;
+	int ret = 0;
 
 	if (params == NULL)
 		return -EINVAL;
@@ -187,10 +187,9 @@  rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
 		}
 	}
 
-	return 0;
-
 free_kvlist:
-	rte_kvargs_free(kvlist);
+	if (kvlist != NULL)
+		rte_kvargs_free(kvlist);
 	return ret;
 }