aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
authorJulia Lawall <julia@diku.dk>2009-09-22 19:46:30 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 10:39:45 -0400
commit971370cc18ae13e87b68ba1769cbad497fa4ab98 (patch)
tree504132c3cff85e4ed0d719e7d93ae1bafb914872 /drivers/rtc
parent72445af880dbcd41cffd0d7b78a8c74da093e9eb (diff)
drivers/rtc: introduce missing kfree
Error handling code following a kzalloc should free the allocated data. The semantic match that finds the 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> Cc: David Brownell <david-b@pacbell.net> Cc: Alessandro Zummo <a.zummo@towertech.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-ep93xx.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/rtc/rtc-ep93xx.c b/drivers/rtc/rtc-ep93xx.c
index 551332e4ed0..9da02d108b7 100644
--- a/drivers/rtc/rtc-ep93xx.c
+++ b/drivers/rtc/rtc-ep93xx.c
@@ -128,12 +128,16 @@ static int __init ep93xx_rtc_probe(struct platform_device *pdev)
128 return -ENOMEM; 128 return -ENOMEM;
129 129
130 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 130 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
131 if (res == NULL) 131 if (res == NULL) {
132 return -ENXIO; 132 err = -ENXIO;
133 goto fail_free;
134 }
133 135
134 res = request_mem_region(res->start, resource_size(res), pdev->name); 136 res = request_mem_region(res->start, resource_size(res), pdev->name);
135 if (res == NULL) 137 if (res == NULL) {
136 return -EBUSY; 138 err = -EBUSY;
139 goto fail_free;
140 }
137 141
138 ep93xx_rtc->mmio_base = ioremap(res->start, resource_size(res)); 142 ep93xx_rtc->mmio_base = ioremap(res->start, resource_size(res));
139 if (ep93xx_rtc->mmio_base == NULL) { 143 if (ep93xx_rtc->mmio_base == NULL) {
@@ -169,6 +173,8 @@ fail:
169 pdev->dev.platform_data = NULL; 173 pdev->dev.platform_data = NULL;
170 } 174 }
171 release_mem_region(res->start, resource_size(res)); 175 release_mem_region(res->start, resource_size(res));
176fail_free:
177 kfree(ep93xx_rtc);
172 return err; 178 return err;
173} 179}
174 180