| From b9c3aab315b51f81649a0d737c4c73783fbd8de0 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <jhovold@gmail.com> |
| Date: Tue, 29 May 2012 18:22:48 +0200 |
| Subject: USB: option: fix memory leak |
| |
| From: Johan Hovold <jhovold@gmail.com> |
| |
| commit b9c3aab315b51f81649a0d737c4c73783fbd8de0 upstream. |
| |
| Fix memory leak introduced by commit 383cedc3bb435de7a2 ("USB: serial: |
| full autosuspend support for the option driver") which allocates |
| usb-serial data but never frees it. |
| |
| Signed-off-by: Johan Hovold <jhovold@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/serial/option.c | 12 +++++++++++- |
| 1 file changed, 11 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/usb/serial/option.c |
| +++ b/drivers/usb/serial/option.c |
| @@ -47,6 +47,7 @@ |
| /* Function prototypes */ |
| static int option_probe(struct usb_serial *serial, |
| const struct usb_device_id *id); |
| +static void option_release(struct usb_serial *serial); |
| static int option_send_setup(struct usb_serial_port *port); |
| static void option_instat_callback(struct urb *urb); |
| |
| @@ -1273,7 +1274,7 @@ static struct usb_serial_driver option_1 |
| .ioctl = usb_wwan_ioctl, |
| .attach = usb_wwan_startup, |
| .disconnect = usb_wwan_disconnect, |
| - .release = usb_wwan_release, |
| + .release = option_release, |
| .read_int_callback = option_instat_callback, |
| #ifdef CONFIG_PM |
| .suspend = usb_wwan_suspend, |
| @@ -1384,6 +1385,15 @@ static int option_probe(struct usb_seria |
| return 0; |
| } |
| |
| +static void option_release(struct usb_serial *serial) |
| +{ |
| + struct usb_wwan_intf_private *priv = usb_get_serial_data(serial); |
| + |
| + usb_wwan_release(serial); |
| + |
| + kfree(priv); |
| +} |
| + |
| static void option_instat_callback(struct urb *urb) |
| { |
| int err; |