From 231f052a68a98bf9a232fc2f1616c35db85ccabe Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 3 May 2022 01:19:27 +0200 Subject: [PATCH] 5.4-stable patches added patches: tty-n_gsm-fix-malformed-counter-for-out-of-frame-data.patch tty-n_gsm-fix-wrong-signal-octet-encoding-in-convergence-layer-type-2.patch --- queue-5.4/series | 2 + ...formed-counter-for-out-of-frame-data.patch | 35 ++++++++++++++++ ...encoding-in-convergence-layer-type-2.patch | 40 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 queue-5.4/tty-n_gsm-fix-malformed-counter-for-out-of-frame-data.patch create mode 100644 queue-5.4/tty-n_gsm-fix-wrong-signal-octet-encoding-in-convergence-layer-type-2.patch diff --git a/queue-5.4/series b/queue-5.4/series index 1fe9940fab0..7ea7c1afece 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -72,3 +72,5 @@ cifs-destage-any-unwritten-data-to-the-server-before.patch drivers-net-hippi-fix-deadlock-in-rr_close.patch net-ethernet-stmmac-fix-write-to-sgmii_adapter_base.patch x86-cpu-load-microcode-during-restore_processor_state.patch +tty-n_gsm-fix-wrong-signal-octet-encoding-in-convergence-layer-type-2.patch +tty-n_gsm-fix-malformed-counter-for-out-of-frame-data.patch diff --git a/queue-5.4/tty-n_gsm-fix-malformed-counter-for-out-of-frame-data.patch b/queue-5.4/tty-n_gsm-fix-malformed-counter-for-out-of-frame-data.patch new file mode 100644 index 00000000000..9abb1e2bf5e --- /dev/null +++ b/queue-5.4/tty-n_gsm-fix-malformed-counter-for-out-of-frame-data.patch @@ -0,0 +1,35 @@ +From a24b4b2f660b7ddf3f484b37600bba382cb28a9d Mon Sep 17 00:00:00 2001 +From: Daniel Starke +Date: Thu, 14 Apr 2022 02:42:12 -0700 +Subject: tty: n_gsm: fix malformed counter for out of frame data + +From: Daniel Starke + +commit a24b4b2f660b7ddf3f484b37600bba382cb28a9d upstream. + +The gsm_mux field 'malformed' represents the number of malformed frames +received. However, gsm1_receive() also increases this counter for any out +of frame byte. +Fix this by ignoring out of frame data for the malformed counter. + +Fixes: e1eaea46bb40 ("tty: n_gsm line discipline") +Cc: stable@vger.kernel.org +Signed-off-by: Daniel Starke +Link: https://lore.kernel.org/r/20220414094225.4527-7-daniel.starke@siemens.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/tty/n_gsm.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/tty/n_gsm.c ++++ b/drivers/tty/n_gsm.c +@@ -1961,7 +1961,8 @@ static void gsm1_receive(struct gsm_mux + } + /* Any partial frame was a runt so go back to start */ + if (gsm->state != GSM_START) { +- gsm->malformed++; ++ if (gsm->state != GSM_SEARCH) ++ gsm->malformed++; + gsm->state = GSM_START; + } + /* A SOF in GSM_START means we are still reading idling or diff --git a/queue-5.4/tty-n_gsm-fix-wrong-signal-octet-encoding-in-convergence-layer-type-2.patch b/queue-5.4/tty-n_gsm-fix-wrong-signal-octet-encoding-in-convergence-layer-type-2.patch new file mode 100644 index 00000000000..18f75e65f15 --- /dev/null +++ b/queue-5.4/tty-n_gsm-fix-wrong-signal-octet-encoding-in-convergence-layer-type-2.patch @@ -0,0 +1,40 @@ +From 06d5afd4d640eea67f5623e76cd5fc03359b7f3c Mon Sep 17 00:00:00 2001 +From: Daniel Starke +Date: Thu, 14 Apr 2022 02:42:10 -0700 +Subject: tty: n_gsm: fix wrong signal octet encoding in convergence layer type 2 + +From: Daniel Starke + +commit 06d5afd4d640eea67f5623e76cd5fc03359b7f3c upstream. + +n_gsm is based on the 3GPP 07.010 and its newer version is the 3GPP 27.010. +See https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1516 +The changes from 07.010 to 27.010 are non-functional. Therefore, I refer to +the newer 27.010 here. Chapter 5.5.2 describes that the signal octet in +convergence layer type 2 can be either one or two bytes. The length is +encoded in the EA bit. This is set 1 for the last byte in the sequence. +gsmtty_modem_update() handles this correctly but gsm_dlci_data_output() +fails to set EA to 1. There is no case in which we encode two signal octets +as there is no case in which we send out a break signal. +Therefore, always set the EA bit to 1 for the signal octet to fix this. + +Fixes: e1eaea46bb40 ("tty: n_gsm line discipline") +Cc: stable@vger.kernel.org +Signed-off-by: Daniel Starke +Link: https://lore.kernel.org/r/20220414094225.4527-5-daniel.starke@siemens.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/tty/n_gsm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/tty/n_gsm.c ++++ b/drivers/tty/n_gsm.c +@@ -823,7 +823,7 @@ static int gsm_dlci_data_output(struct g + break; + case 2: /* Unstructed with modem bits. + Always one byte as we never send inline break data */ +- *dp++ = gsm_encode_modem(dlci); ++ *dp++ = (gsm_encode_modem(dlci) << 1) | EA; + break; + } + WARN_ON(kfifo_out_locked(dlci->fifo, dp , len, &dlci->lock) != len); -- 2.47.3