lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Mon, 14 Jan 2013 16:32:20 -0600
From:	Josh Cartwright <joshc@....teric.us>
To:	Cong Ding <dinggnu@...il.com>
Cc:	Russell King <linux@....linux.org.uk>,
	Soren Brinkmann <soren.brinkmann@...inx.com>,
	Josh Cartwright <josh.cartwright@...com>,
	Michal Simek <michal.simek@...inx.com>,
	Peter Crosthwaite <peter.crosthwaite@...inx.com>,
	John Linn <john.linn@...inx.com>,
	linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] arm: mach-zynq/timer.c: fix memory leakage

On Mon, Jan 14, 2013 at 10:18:46PM +0100, Cong Ding wrote:
> the variable ttccs allocated isn't freed when error occurs, so we call kfree
> before return.
> 
> Signed-off-by: Cong Ding <dinggnu@...il.com>
> ---
>  arch/arm/mach-zynq/timer.c |   25 ++++++++++++++++---------
>  1 file changed, 16 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm/mach-zynq/timer.c b/arch/arm/mach-zynq/timer.c
> index f9fbc9c..df04761 100644
> --- a/arch/arm/mach-zynq/timer.c
> +++ b/arch/arm/mach-zynq/timer.c
> @@ -203,15 +203,15 @@ static void __init zynq_ttc_setup_clocksource(struct device_node *np,
>  
>  	err = of_property_read_u32(np, "reg", &reg);
>  	if (WARN_ON(err))
> -		return;
> +		goto out;
>  
>  	clk = of_clk_get_by_name(np, "cpu_1x");
>  	if (WARN_ON(IS_ERR(clk)))
> -		return;
> +		goto out;
>  
>  	err = clk_prepare_enable(clk);
>  	if (WARN_ON(err))
> -		return;
> +		goto out;
>  
>  	ttccs->xttc.base_addr = base + reg * 4;
>  
> @@ -229,7 +229,10 @@ static void __init zynq_ttc_setup_clocksource(struct device_node *np,
>  
>  	err = clocksource_register_hz(&ttccs->cs, clk_get_rate(clk) / PRESCALE);
>  	if (WARN_ON(err))
> -		return;
> +		goto out;
> +	return;
> +out:
> +	kfree(ttccs);
>  }

Okay...hmm.  If initialization of the timer fails, you'll have bigger
issues then just a small memory leak.  Especially since right now the
TTC is the only supported timer on zynq.

But okay, to be forward looking we should probably properly handle these
error cases.

You've only handled the memory leak here, but there are other potential
leaks that you should be handling (the clk handle, clock event
interrupt, ioremap()'d region, etc).  Could you take care of those while
your at it?

   Josh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ