diff options
Diffstat (limited to 'usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch')
| -rw-r--r-- | usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch b/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch deleted file mode 100644 index 3e5fed200af458..00000000000000 --- a/usb.current/usb-serial-fix-leak-of-usb-serial-module-refrence-count.patch +++ /dev/null @@ -1,117 +0,0 @@ -From tom.leiming@gmail.com Thu Aug 12 13:50:12 2010 -From: tom.leiming@gmail.com -To: greg@kroah.com, - stern@rowland.harvard.edu -Cc: linux-usb@vger.kernel.org, Ming Lei <tom.leiming@gmail.com>, Johan Hovold <jhovold@gmail.com>, Andi Kleen <ak@linux.intel.com> -Subject: USB: serial: fix leak of usb serial module refrence count -Date: Sat, 7 Aug 2010 16:20:35 +0800 -Message-Id: <1281169235-4883-1-git-send-email-tom.leiming@gmail.com> - -From: Ming Lei <tom.leiming@gmail.com> - -The patch with title below makes reference count of usb serial module -always more than one after driver is bound. - - USB-BKL: Remove BKL use for usb serial driver probing - -In fact, the patch above only replaces lock_kernel() with try_module_get() -, and does not use module_put() to do what unlock_kernel() did, so casue leak -of reference count of usb serial module and the module can not be unloaded -after serial driver is bound with device. - -This patch fixes the issue, also simplifies such things: - -only call try_module_get() once in the entry of usb_serial_probe() - -only call module_put() once in the exit of usb_serial_probe - -Signed-off-by: Ming Lei <tom.leiming@gmail.com> -Cc: Johan Hovold <jhovold@gmail.com> -Cc: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/usb/serial/usb-serial.c | 23 +++++++---------------- - 1 file changed, 7 insertions(+), 16 deletions(-) - ---- a/drivers/usb/serial/usb-serial.c -+++ b/drivers/usb/serial/usb-serial.c -@@ -736,6 +736,7 @@ int usb_serial_probe(struct usb_interfac - - serial = create_serial(dev, interface, type); - if (!serial) { -+ module_put(type->driver.owner); - dev_err(&interface->dev, "%s - out of memory\n", __func__); - return -ENOMEM; - } -@@ -746,11 +747,11 @@ int usb_serial_probe(struct usb_interfac - - id = get_iface_id(type, interface); - retval = type->probe(serial, id); -- module_put(type->driver.owner); - - if (retval) { - dbg("sub driver rejected device"); - kfree(serial); -+ module_put(type->driver.owner); - return retval; - } - } -@@ -822,6 +823,7 @@ int usb_serial_probe(struct usb_interfac - if (num_bulk_in == 0 || num_bulk_out == 0) { - dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n"); - kfree(serial); -+ module_put(type->driver.owner); - return -ENODEV; - } - } -@@ -835,22 +837,15 @@ int usb_serial_probe(struct usb_interfac - dev_err(&interface->dev, - "Generic device with no bulk out, not allowed.\n"); - kfree(serial); -+ module_put(type->driver.owner); - return -EIO; - } - } - #endif - if (!num_ports) { - /* if this device type has a calc_num_ports function, call it */ -- if (type->calc_num_ports) { -- if (!try_module_get(type->driver.owner)) { -- dev_err(&interface->dev, -- "module get failed, exiting\n"); -- kfree(serial); -- return -EIO; -- } -+ if (type->calc_num_ports) - num_ports = type->calc_num_ports(serial); -- module_put(type->driver.owner); -- } - if (!num_ports) - num_ports = type->num_ports; - } -@@ -1039,13 +1034,7 @@ int usb_serial_probe(struct usb_interfac - - /* if this device type has an attach function, call it */ - if (type->attach) { -- if (!try_module_get(type->driver.owner)) { -- dev_err(&interface->dev, -- "module get failed, exiting\n"); -- goto probe_error; -- } - retval = type->attach(serial); -- module_put(type->driver.owner); - if (retval < 0) - goto probe_error; - serial->attached = 1; -@@ -1088,10 +1077,12 @@ int usb_serial_probe(struct usb_interfac - exit: - /* success */ - usb_set_intfdata(interface, serial); -+ module_put(type->driver.owner); - return 0; - - probe_error: - usb_serial_put(serial); -+ module_put(type->driver.owner); - return -EIO; - } - EXPORT_SYMBOL_GPL(usb_serial_probe); |
