USB: serial: fix memleak on error path in usb-serial
Subsystems (2)
PATCH 1/1 USB: serial: fix memleak on error path in usb-serial
udriver struct allocated by kzalloc() will not be freed if usb_register() and next calls fail. This patch fixes this by adding one more step with kfree(udriver) in error path.
--- drivers/usb/serial/usb-serial.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/serial/usb-serial.c +3 -1
@@ -1433,7 +1433,7 @@ int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[] rc =usb_register (udriver);if (rc) -return rc; + goto failed_usb_register;for (sd = serial_drivers; *sd; ++sd) { (*sd)->usb_driver = udriver;
@@ -1451,6 +1451,8 @@ int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[]while (sd-- > serial_drivers)usb_serial_deregister (*sd);usb_deregister (udriver); +failed_usb_register: +kfree (udriver);return rc; }EXPORT_SYMBOL_GPL (usb_serial_register_drivers);
Signature · 1 line
2.5.0
Quoted 24 lines · Alexey Klimov
udriver struct allocated by
kzalloc()will not be freed ifusb_register()and next calls fail. This patch fixes this by adding one more step with kfree(udriver) in error path.Cc Alan Stern <[email protected]>Signed-off-by Alexey Klimov <[email protected]>--- drivers/usb/serial/usb-serial.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)drivers/usb/serial/usb-serial.c +1
-1@@ -1433,7 +1433,7 @@ int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[] rc =usb_register (udriver);if (rc) -return rc; + goto failed_usb_register;for (sd = serial_drivers; *sd; ++sd) { (*sd)->usb_driver = udriver;
drivers/usb/serial/usb-serial.c int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[] · line 1458
Quoted 8 lines
drivers/usb/serial/usb-serial.c +2
-0@@ -1451,6 +1451,8 @@ int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[]while (sd-- > serial_drivers)usb_serial_deregister (*sd);usb_deregister (udriver); +failed_usb_register: +kfree (udriver);return rc; }EXPORT_SYMBOL_GPL (usb_serial_register_drivers);
Pretty careless of me... Thanks for fixing this.
Alan Stern
Johan Hovold
maintainerQuoted 6 lines · Alexey Klimov
udriver struct allocated by
kzalloc()will not be freed ifusb_register()and next calls fail. This patch fixes this by adding one more step with kfree(udriver) in error path.Cc Alan Stern <[email protected]>Signed-off-by Alexey Klimov <[email protected]>
Now applied, thanks.
Johan