serial: ioc4_serial: Free memory when kzalloc fails during probe
authorSouptick Joarder <jrdr.linux@gmail.com>
Thu, 3 Nov 2016 14:06:54 +0000 (19:36 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Nov 2016 13:50:46 +0000 (14:50 +0100)
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>
drivers/tty/serial/ioc4_serial.c

index e5c42fef69d26254e1250aa0b0e00bdd894bc1fc..3be051abb2a26a2b0608fc02f478ce91d6a2f8ac 100644 (file)
@@ -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;
 }
 
 /**