diff options
author | Jiri Slaby <jslaby@suse.cz> | 2012-04-02 07:54:04 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-09 14:18:36 -0400 |
commit | d230788f760043d9c69dbd3928b76f549bff5fb9 (patch) | |
tree | 186aec69597bfe74ccb9aba87b87701d336db05b /drivers/net/usb/hso.c | |
parent | 005ce07f8068f9970f522a1a4ffeb9a9d108479a (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.c | 12 |
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; |
3348 | err_unreg_tty: | ||
3349 | tty_unregister_driver(tty_drv); | ||
3350 | err_free_tty: | ||
3351 | put_tty_driver(tty_drv); | ||
3352 | return result; | ||
3350 | } | 3353 | } |
3351 | 3354 | ||
3352 | static void __exit hso_exit(void) | 3355 | static 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 | } |