|
Takashi Iwai |
0e6806 |
From cd936621379d513bd768319219840b003a45e729 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
0e6806 |
From: Zhenguo Zhao <Zhenguo.Zhao1@unisoc.com>
|
|
Takashi Iwai |
0e6806 |
Date: Fri, 20 Aug 2021 20:17:46 +0800
|
|
Takashi Iwai |
0e6806 |
Subject: [PATCH] tty: n_gsm: Modify cr bit value when config requester
|
|
Takashi Iwai |
0e6806 |
Git-commit: cd936621379d513bd768319219840b003a45e729
|
|
Takashi Iwai |
0e6806 |
Patch-mainline: v5.16-rc1
|
|
Takashi Iwai |
0e6806 |
References: git-fixes
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
When n_gsm config "initiator=0",as requester,gsmld will receive dlci
|
|
Takashi Iwai |
0e6806 |
SABM and DISC control command frame,the CR bit value should be 1.
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
If cr == 0,it will goto invalid,and it can't send UA response
|
|
Takashi Iwai |
0e6806 |
frame and open requster dlci.
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
case SABM|PF:
|
|
Takashi Iwai |
0e6806 |
- if (cr == 0)
|
|
Takashi Iwai |
0e6806 |
+ if (cr == 0) {
|
|
Takashi Iwai |
0e6806 |
+ printk("gsm_queue invalid\n");
|
|
Takashi Iwai |
0e6806 |
goto invalid;
|
|
Takashi Iwai |
0e6806 |
+ }
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
Example,gsmld receive dlc0 SABM command frame:f9 03 3f 01 1c f9
|
|
Takashi Iwai |
0e6806 |
but gsmld goto invalid.
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
Kernel test log:
|
|
Takashi Iwai |
0e6806 |
[ 101.794705] c0 gsmld_receive: 00000000: f9 03 3f 01 1c f9
|
|
Takashi Iwai |
0e6806 |
[ 101.803341] c0 <-- 0) C: SABM(P)
|
|
Takashi Iwai |
0e6806 |
[ 101.811371] c0 gsm_queue invalid
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
Signed-off-by: Zhenguo Zhao <Zhenguo.Zhao1@unisoc.com>
|
|
Takashi Iwai |
0e6806 |
Link: https://lore.kernel.org/r/1629461872-26965-2-git-send-email-zhenguo6858@gmail.com
|
|
Takashi Iwai |
0e6806 |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Takashi Iwai |
0e6806 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
---
|
|
Takashi Iwai |
0e6806 |
drivers/tty/n_gsm.c | 4 ++--
|
|
Takashi Iwai |
0e6806 |
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
--- a/drivers/tty/n_gsm.c
|
|
Takashi Iwai |
0e6806 |
+++ b/drivers/tty/n_gsm.c
|
|
Takashi Iwai |
0e6806 |
@@ -1779,7 +1779,7 @@ static void gsm_queue(struct gsm_mux *gs
|
|
Takashi Iwai |
0e6806 |
|
|
Takashi Iwai |
0e6806 |
switch (gsm->control) {
|
|
Takashi Iwai |
0e6806 |
case SABM|PF:
|
|
Takashi Iwai |
0e6806 |
- if (cr == 0)
|
|
Takashi Iwai |
0e6806 |
+ if (cr == 1)
|
|
Takashi Iwai |
0e6806 |
goto invalid;
|
|
Takashi Iwai |
0e6806 |
if (dlci == NULL)
|
|
Takashi Iwai |
0e6806 |
dlci = gsm_dlci_alloc(gsm, address);
|
|
Takashi Iwai |
0e6806 |
@@ -1793,7 +1793,7 @@ static void gsm_queue(struct gsm_mux *gs
|
|
Takashi Iwai |
0e6806 |
}
|
|
Takashi Iwai |
0e6806 |
break;
|
|
Takashi Iwai |
0e6806 |
case DISC|PF:
|
|
Takashi Iwai |
0e6806 |
- if (cr == 0)
|
|
Takashi Iwai |
0e6806 |
+ if (cr == 1)
|
|
Takashi Iwai |
0e6806 |
goto invalid;
|
|
Takashi Iwai |
0e6806 |
if (dlci == NULL || dlci->state == DLCI_CLOSED) {
|
|
Takashi Iwai |
0e6806 |
gsm_response(gsm, address, DM);
|