| From 17eac652028501df7ea296b1d9b9c134db262b7d Mon Sep 17 00:00:00 2001 |
| From: Daniel Starke <daniel.starke@siemens.com> |
| Date: Thu, 14 Apr 2022 02:42:15 -0700 |
| Subject: tty: n_gsm: fix missing explicit ldisc flush |
| |
| From: Daniel Starke <daniel.starke@siemens.com> |
| |
| commit 17eac652028501df7ea296b1d9b9c134db262b7d upstream. |
| |
| In gsm_cleanup_mux() the muxer is closed down and all queues are removed. |
| However, removing the queues is done without explicit control of the |
| underlying buffers. Flush those before freeing up our queues to ensure |
| that all outgoing queues are cleared consistently. Otherwise, a new mux |
| connection establishment attempt may time out while the underlying tty is |
| still busy sending out the remaining data from the previous connection. |
| |
| Fixes: e1eaea46bb40 ("tty: n_gsm line discipline") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Daniel Starke <daniel.starke@siemens.com> |
| Link: https://lore.kernel.org/r/20220414094225.4527-10-daniel.starke@siemens.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/tty/n_gsm.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/drivers/tty/n_gsm.c |
| +++ b/drivers/tty/n_gsm.c |
| @@ -2101,6 +2101,7 @@ static void gsm_cleanup_mux(struct gsm_m |
| gsm_dlci_release(gsm->dlci[i]); |
| mutex_unlock(&gsm->mutex); |
| /* Now wipe the queues */ |
| + tty_ldisc_flush(gsm->tty); |
| list_for_each_entry_safe(txq, ntxq, &gsm->tx_list, list) |
| kfree(txq); |
| INIT_LIST_HEAD(&gsm->tx_list); |