diff options
author | Oliver Neukum <oliver@neukum.org> | 2009-07-13 04:46:57 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-07-28 17:07:10 -0400 |
commit | de8f8bd63334fe2014be7d9ab3a81ce9b96e5d19 (patch) | |
tree | 6de13d80966d2db57942038d1d61186611247321 /drivers/staging | |
parent | f3a756883ac028c536479e2eb283477fec80c828 (diff) |
Staging: serqt_usb2: fix memory leak in error case
a standard memory leak, as later allocations may fail even if prior
allocations did not. Then the prior allocations must be undone.
Signed-off-by: Oliver Neukum <oliver@neukum.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/serqt_usb2/serqt_usb2.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/staging/serqt_usb2/serqt_usb2.c b/drivers/staging/serqt_usb2/serqt_usb2.c index f9ff9c26678..0fdf8c6dc64 100644 --- a/drivers/staging/serqt_usb2/serqt_usb2.c +++ b/drivers/staging/serqt_usb2/serqt_usb2.c | |||
@@ -738,6 +738,11 @@ static int qt_startup(struct usb_serial *serial) | |||
738 | if (!qt_port) { | 738 | if (!qt_port) { |
739 | dbg("%s: kmalloc for quatech_port (%d) failed!.", | 739 | dbg("%s: kmalloc for quatech_port (%d) failed!.", |
740 | __func__, i); | 740 | __func__, i); |
741 | for(--i; i >= 0; i--) { | ||
742 | port = serial->port[i]; | ||
743 | kfree(usb_get_serial_port_data(port)); | ||
744 | usb_set_serial_port_data(port, NULL); | ||
745 | } | ||
741 | return -ENOMEM; | 746 | return -ENOMEM; |
742 | } | 747 | } |
743 | spin_lock_init(&qt_port->lock); | 748 | spin_lock_init(&qt_port->lock); |