From: Julia Lawall <julia@xxxxxxx> In this code, 0 is returned on memory allocation failure, even though other failures return -ENOMEM or other similar values. A simplified version of the semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/) // <smpl> @@ expression ret; expression x,e1,e2,e3; @@ ret = 0 ... when != ret = e1 *x = \(kmalloc\|kcalloc\|kzalloc\)(...) ... when != ret = e2 if (x == NULL) { ... when != ret = e3 return ret; } // </smpl> Signed-off-by: Julia Lawall <julia@xxxxxxx> --- drivers/serial/ioc3_serial.c | 1 + 1 file changed, 1 insertion(+) diff -u -p a/drivers/serial/ioc3_serial.c b/drivers/serial/ioc3_serial.c --- a/drivers/serial/ioc3_serial.c +++ b/drivers/serial/ioc3_serial.c @@ -2045,6 +2045,7 @@ ioc3uart_probe(struct ioc3_submodule *is if (!port) { printk(KERN_WARNING "IOC3 serial memory not available for port\n"); + ret = -ENOMEM; goto out4; } spin_lock_init(&port->ip_lock);