From: Jiri Slaby Date: Mon, 2 Apr 2012 11:54:04 +0000 (+0200) Subject: TTY: hso, free tty_driver X-Git-Tag: next-20120411~17^2~56 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=d230788f760043d9c69dbd3928b76f549bff5fb9;p=karo-tx-linux.git 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 Cc: Jan Dumon Signed-off-by: Greg Kroah-Hartman --- 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) if (result) { printk(KERN_ERR "%s - tty_register_driver failed(%d)\n", __func__, result); - return result; + goto err_free_tty; } /* register this module as an usb driver */ @@ -3340,13 +3340,16 @@ static int __init hso_init(void) if (result) { printk(KERN_ERR "Could not register hso driver? error: %d\n", result); - /* cleanup serial interface */ - tty_unregister_driver(tty_drv); - return result; + goto err_unreg_tty; } /* done */ return 0; +err_unreg_tty: + tty_unregister_driver(tty_drv); +err_free_tty: + put_tty_driver(tty_drv); + return result; } static void __exit hso_exit(void) @@ -3354,6 +3357,7 @@ static void __exit hso_exit(void) printk(KERN_INFO "hso: unloaded\n"); tty_unregister_driver(tty_drv); + put_tty_driver(tty_drv); /* deregister the usb driver */ usb_deregister(&hso_driver); }