Patchwork [6/6] rtc-mxc.c: introduce missing kfree

login
register
mail settings
Submitter Alessandro Zummo
Date Jan. 20, 2010, 11:58 p.m.
Message ID <20100121005849.1fa343a9@linux.lan.towertech.it>
Download mbox | patch
Permalink /patch/43398/
State New
Headers show

Comments

Alessandro Zummo - Jan. 20, 2010, 11:58 p.m.
From: Julia Lawall <julia@diku.dk>

Error handling code following a kzalloc should free the allocated data.

The semantic match that finds this problem is as follows:
(http://www.emn.fr/x-info/coccinelle/)

// <smpl>
@r exists@
local idexpression x;
statement S;
expression E;
identifier f,f1,l;
position p1,p2;
expression *ptr != NULL;
@@

x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...);
...
if (x == NULL) S
<... when != x
     when != if (...) { <+...x...+> }
(
x->f1 = E
|
 (x->f1 == NULL || ...)
|
 f(...,x->f1,...)
)
...>
(
 return \(0\|<+...x...+>\|ptr\);
|
 return@p2 ...;
)

@script:python@
p1 << r.p1;
p2 << r.p2;
@@

print "* file: %s kmalloc %s return %s" % (p1[0].file,p1[0].line,p2[0].line)
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
Cc: Daniel Mack <daniel@caiaq.de>

patch-name: 2-8-drivers-rtc-introduce-missing-kfree.patch
patch-rev1: 98f7995fc38b62a0e182f3232aeddba05e065dee
patch-rev2: 21f21ad391e7d62effad9d00153598c20ad89471
---
 drivers/rtc/rtc-mxc.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
Daniel Mack - Jan. 21, 2010, 2:32 a.m.
On Thu, Jan 21, 2010 at 12:58:49AM +0100, Alessandro Zummo wrote:
> Error handling code following a kzalloc should free the allocated data.
> 
> The semantic match that finds this problem is as follows:
> (http://www.emn.fr/x-info/coccinelle/)
> 

[...]

> Signed-off-by: Julia Lawall <julia@diku.dk>
> Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
> Cc: Daniel Mack <daniel@caiaq.de>

Acked-by: Daniel Mack <daniel@caiaq.de>

Thanks,
Daniel


> patch-name: 2-8-drivers-rtc-introduce-missing-kfree.patch
> patch-rev1: 98f7995fc38b62a0e182f3232aeddba05e065dee
> patch-rev2: 21f21ad391e7d62effad9d00153598c20ad89471
> ---
>  drivers/rtc/rtc-mxc.c |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c
> index 6bd5072..2642e6b 100644
> --- a/drivers/rtc/rtc-mxc.c
> +++ b/drivers/rtc/rtc-mxc.c
> @@ -396,8 +396,10 @@ static int __init mxc_rtc_probe(struct platform_device *pdev)
>  	pdata->ioaddr = ioremap(res->start, resource_size(res));
>  
>  	clk = clk_get(&pdev->dev, "ckil");
> -	if (IS_ERR(clk))
> -		return PTR_ERR(clk);
> +	if (IS_ERR(clk)) {
> +		ret = PTR_ERR(clk);
> +		goto exit_free_pdata;
> +	}
>  
>  	rate = clk_get_rate(clk);
>  	clk_put(clk);
>

Patch

diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c
index 6bd5072..2642e6b 100644
--- a/drivers/rtc/rtc-mxc.c
+++ b/drivers/rtc/rtc-mxc.c
@@ -396,8 +396,10 @@  static int __init mxc_rtc_probe(struct platform_device *pdev)
 	pdata->ioaddr = ioremap(res->start, resource_size(res));
 
 	clk = clk_get(&pdev->dev, "ckil");
-	if (IS_ERR(clk))
-		return PTR_ERR(clk);
+	if (IS_ERR(clk)) {
+		ret = PTR_ERR(clk);
+		goto exit_free_pdata;
+	}
 
 	rate = clk_get_rate(clk);
 	clk_put(clk);