forked from Minki/linux
drivers/macintosh: Add missing of_node_put in therm_adt746x.c
of_node_put is needed before discarding a value received from of_find_node_by_name, eg in error handling code or when the device node is no longer used. The semantic match that catches the bug is as follows: (http://www.emn.fr/x-info/coccinelle/) // <smpl> @r exists@ local idexpression struct device_node *n; position p1, p2; struct device_node *n1; statement S; identifier f; expression E; expression *ptr != NULL; @@ n@p1 = of_find_node_by_name(...) ... if (!n) S ... when != of_node_put(n) when != n1 = f(n,...) when != E = n when any when strict ( return \(0\|<+...n...+>\|ptr\); | return@p2 ...; | of_node_put(n); | n1 = f(n,...) | E = n ) @script:python@ p1 << r.p1; p2 << r.p2; @@ print "* file: %s of_find_node_by_name %s return %s" % (p1[0].file,p1[0].line,p2[0].line) // </smpl> Signed-off-by: Nicolas Palix <npalix@diku.dk> Signed-off-by: Julia Lawall <julia@diku.dk> Acked-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
89fac11cb3
commit
44ea9c809d
@ -554,7 +554,7 @@ thermostat_init(void)
|
||||
const u32 *prop;
|
||||
int i = 0, offset = 0;
|
||||
int err;
|
||||
|
||||
|
||||
np = of_find_node_by_name(NULL, "fan");
|
||||
if (!np)
|
||||
return -ENODEV;
|
||||
@ -613,13 +613,13 @@ thermostat_init(void)
|
||||
}
|
||||
|
||||
of_dev = of_platform_device_create(np, "temperatures", NULL);
|
||||
|
||||
of_node_put(np);
|
||||
|
||||
if (of_dev == NULL) {
|
||||
printk(KERN_ERR "Can't register temperatures device !\n");
|
||||
of_node_put(np);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
||||
err = device_create_file(&of_dev->dev, &dev_attr_sensor1_temperature);
|
||||
err |= device_create_file(&of_dev->dev, &dev_attr_sensor2_temperature);
|
||||
err |= device_create_file(&of_dev->dev, &dev_attr_sensor1_limit);
|
||||
|
Loading…
Reference in New Issue
Block a user