drivers/serial/crisv10.c: add missing put_tty_driver
Author: Julia Lawall <julia@diku.dk>
alloc_tty_driver is called at the beginning of the function containing the
lines of code shown in the patch. Thus, put_tty_driver is needed before
returning in the error handling code.
The semantic match that finds this problem is as follows:
(http://www.emn.fr/x-info/coccinelle/)
//
@nr exists@
local idexpression x;
expression E,f;
position p1,p2,p3;
identifier l;
statement S;
@@
x = alloc_tty_driver@p1(...)
...
if (x == NULL) S
... when != E = x
when != put_tty_driver(x)
when != goto l;
(
return \(0\|x\);
|
return@p3 ...;
)
@script:python@
p1 << nr.p1;
p3 << nr.p3;
@@
print "%s: call on line %s not freed or saved before return on line %s" % (p1[0].file,p1[0].line,p3[0].line)
//
Signed-off-by: Julia Lawall
Signed-off-by: Alan Cox
Signed-off-by: Linus Torvalds
---
drivers/serial/crisv10.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c
index bf94a77..a467c77 100644
--- a/drivers/serial/crisv10.c
+++ b/drivers/serial/crisv10.c
@@ -4419,6 +4419,7 @@ rs_init(void)
rs485_pa_bit)) {
printk(KERN_CRIT "ETRAX100LX serial: Could not allocate "
"RS485 pin\n");
+ put_tty_driver(driver);
return -EBUSY;
}
#endif
@@ -4427,6 +4428,7 @@ rs_init(void)
rs485_port_g_bit)) {
printk(KERN_CRIT "ETRAX100LX serial: Could not allocate "
"RS485 pin\n");
+ put_tty_driver(driver);
return -EBUSY;
}
#endif |
---
drivers/serial/crisv10.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c
index bf94a77..a467c77 100644
--- a/drivers/serial/crisv10.c
+++ b/drivers/serial/crisv10.c
@@ -4419,6 +4419,7 @@ rs_init(void)
rs485_pa_bit)) {
printk(KERN_CRIT "ETRAX100LX serial: Could not allocate "
"RS485 pin\n");
+ put_tty_driver(driver);
return -EBUSY;
}
#endif
@@ -4427,6 +4428,7 @@ rs_init(void)
rs485_port_g_bit)) {
printk(KERN_CRIT "ETRAX100LX serial: Could not allocate "
"RS485 pin\n");
+ put_tty_driver(driver);
return -EBUSY;
}
#endif