aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb/hso.c
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2012-04-02 07:54:04 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-09 14:18:36 -0400
commitd230788f760043d9c69dbd3928b76f549bff5fb9 (patch)
tree186aec69597bfe74ccb9aba87b87701d336db05b /drivers/net/usb/hso.c
parent005ce07f8068f9970f522a1a4ffeb9a9d108479a (diff)
TTY: hso, free tty_driver
Do not leak tty_driver structure on each module removal. Also do proper frees in fail paths of module_init. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: Jan Dumon <j.dumon@option.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/net/usb/hso.c')
-rw-r--r--drivers/net/usb/hso.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index abe47ad59479..cdc589edeaf6 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -3332,7 +3332,7 @@ static int __init hso_init(void)
3332 if (result) { 3332 if (result) {
3333 printk(KERN_ERR "%s - tty_register_driver failed(%d)\n", 3333 printk(KERN_ERR "%s - tty_register_driver failed(%d)\n",
3334 __func__, result); 3334 __func__, result);
3335 return result; 3335 goto err_free_tty;
3336 } 3336 }
3337 3337
3338 /* register this module as an usb driver */ 3338 /* register this module as an usb driver */
@@ -3340,13 +3340,16 @@ static int __init hso_init(void)
3340 if (result) { 3340 if (result) {
3341 printk(KERN_ERR "Could not register hso driver? error: %d\n", 3341 printk(KERN_ERR "Could not register hso driver? error: %d\n",
3342 result); 3342 result);
3343 /* cleanup serial interface */ 3343 goto err_unreg_tty;
3344 tty_unregister_driver(tty_drv);
3345 return result;
3346 } 3344 }
3347 3345
3348 /* done */ 3346 /* done */
3349 return 0; 3347 return 0;
3348err_unreg_tty:
3349 tty_unregister_driver(tty_drv);
3350err_free_tty:
3351 put_tty_driver(tty_drv);
3352 return result;
3350} 3353}
3351 3354
3352static void __exit hso_exit(void) 3355static void __exit hso_exit(void)
@@ -3354,6 +3357,7 @@ static void __exit hso_exit(void)
3354 printk(KERN_INFO "hso: unloaded\n"); 3357 printk(KERN_INFO "hso: unloaded\n");
3355 3358
3356 tty_unregister_driver(tty_drv); 3359 tty_unregister_driver(tty_drv);
3360 put_tty_driver(tty_drv);
3357 /* deregister the usb driver */ 3361 /* deregister the usb driver */
3358 usb_deregister(&hso_driver); 3362 usb_deregister(&hso_driver);
3359} 3363}