Speakup opens tty using tty_open_by_driver. When closing, it calls tty_ldisc_release but doesn't close and remove the tty itself. As a result, that tty cannot then be opened from user space. This patch calls tty_release_struct which ensures that tty is safely removed and freed up. It also calls tty_ldisc_release, so speakup doesn't need to call it. This patch also unregisters N_SPEAKUP. It is registered when a speakup module is loaded. Signed-off-by: Okash Khawaja <okash.khawaja@xxxxxxxxx> --- drivers/staging/speakup/spk_ttyio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/drivers/staging/speakup/spk_ttyio.c +++ b/drivers/staging/speakup/spk_ttyio.c @@ -300,7 +300,9 @@ void spk_ttyio_release(void) tty_ldisc_flush(speakup_tty); tty_unlock(speakup_tty); - tty_ldisc_release(speakup_tty); + tty_release_struct(speakup_tty, speakup_tty->index); + if (tty_unregister_ldisc(N_SPEAKUP)) + pr_warn("speakup: failed to unregister line discipline N_SPEAKUP\n"); } EXPORT_SYMBOL_GPL(spk_ttyio_release); _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel