[dpdk-dev] Mem: Fixes small memory leak due to missing free.

Message ID 1432065275-26905-1-git-send-email-eziegenb@brocade.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

eziegenb May 19, 2015, 7:54 p.m. UTC
  A function in cmdline.c has a return that does not free buf properly.

Signed-off-by: eziegenb <eziegenb@brocade.com>
---
 lib/librte_cmdline/cmdline.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Stephen Hemminger May 19, 2015, 9:33 p.m. UTC | #1
On Tue, 19 May 2015 12:54:35 -0700
eziegenb <eziegenb@brocade.com> wrote:

> A function in cmdline.c has a return that does not free buf properly.
> 
> Signed-off-by: eziegenb <eziegenb@brocade.com>
> ---
>  lib/librte_cmdline/cmdline.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c
> index e61c4f2..747d3bb 100644
> --- a/lib/librte_cmdline/cmdline.c
> +++ b/lib/librte_cmdline/cmdline.c
> @@ -192,8 +192,10 @@ cmdline_printf(const struct cmdline *cl, const char *fmt, ...)
>  	va_start(ap, fmt);
>  	ret = vsnprintf(buf, BUFSIZ, fmt, ap);
>  	va_end(ap);
> -	if (ret < 0)
> +	if (ret < 0){
> +		free(buf);
>  		return;
> +	}
>  	if (ret >= BUFSIZ)
>  		ret = BUFSIZ - 1;
>  	write(cl->s_out, buf, ret);

Acked-by: Stephen Hemminger <stephen@networkplumber.org>
  
Thomas Monjalon May 19, 2015, 9:57 p.m. UTC | #2
Hi,

2015-05-19 12:54, eziegenb:
> A function in cmdline.c has a return that does not free buf properly.
> 
> Signed-off-by: eziegenb <eziegenb@brocade.com>

Is it possible to have your real name?
Thanks
  
John McNamara May 19, 2015, 10:38 p.m. UTC | #3
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of eziegenb
> Sent: Tuesday, May 19, 2015 8:55 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] Mem: Fixes small memory leak due to missing
> free.
> 
> A function in cmdline.c has a return that does not free buf properly.

That didn't turn up in the Coverity scan (perhaps because it is in the #else branch of an #ifdef) but it is a leak.

Acked-by: John McNamara <john.mcnamara@intel.com>
  

Patch

diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c
index e61c4f2..747d3bb 100644
--- a/lib/librte_cmdline/cmdline.c
+++ b/lib/librte_cmdline/cmdline.c
@@ -192,8 +192,10 @@  cmdline_printf(const struct cmdline *cl, const char *fmt, ...)
 	va_start(ap, fmt);
 	ret = vsnprintf(buf, BUFSIZ, fmt, ap);
 	va_end(ap);
-	if (ret < 0)
+	if (ret < 0){
+		free(buf);
 		return;
+	}
 	if (ret >= BUFSIZ)
 		ret = BUFSIZ - 1;
 	write(cl->s_out, buf, ret);