summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSouptick Joarder <jrdr.linux@gmail.com>2016-11-03 19:36:54 +0530
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-10 14:50:46 +0100
commit7f8b4ebeb2a1e7bf7af80926db012c9356f7a662 (patch)
tree16e1406251fedc28785f49d25c7c573f329d2620
parent65dabaf532ba632d3660fc7943f3fe47c7c56dc0 (diff)
serial: ioc4_serial: Free memory when kzalloc fails during probe
Inside ioc4_attach_local() 4 memory was allocated using kzalloc and assign it to ports[] within loop. When kzalloc fails inside loop, it returns error without freeing previously allocated memory and we may have memory leak. Fix this by freeing ports[] before return. Signed-off-by: Souptick joarder <jrdr.linux@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/ioc4_serial.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/tty/serial/ioc4_serial.c b/drivers/tty/serial/ioc4_serial.c
index e5c42fef69d2..3be051abb2a2 100644
--- a/drivers/tty/serial/ioc4_serial.c
+++ b/drivers/tty/serial/ioc4_serial.c
@@ -1082,7 +1082,7 @@ static int inline ioc4_attach_local(struct ioc4_driver_data *idd)
if (!port) {
printk(KERN_WARNING
"IOC4 serial memory not available for port\n");
- return -ENOMEM;
+ goto free;
}
spin_lock_init(&port->ip_lock);
@@ -1190,6 +1190,11 @@ static int inline ioc4_attach_local(struct ioc4_driver_data *idd)
handle_dma_error_intr, port);
}
return 0;
+
+free:
+ while (port_number)
+ kfree(ports[--port_number]);
+ return -ENOMEM;
}
/**