diff options
author | Zhenguo Zhao <Zhenguo.Zhao1@unisoc.com> | 2021-08-20 20:17:46 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2021-09-14 10:50:27 +0200 |
commit | cd936621379d513bd768319219840b003a45e729 (patch) | |
tree | 4ad7b6233f19a923859b06fe2ab595c52c71b90d | |
parent | b9e851cd4a8749febb6d68d54d00ed7fe00633c9 (diff) |
tty: n_gsm: Modify cr bit value when config requester
When n_gsm config "initiator=0",as requester,gsmld will receive dlci
SABM and DISC control command frame,the CR bit value should be 1.
If cr == 0,it will goto invalid,and it can't send UA response
frame and open requster dlci.
case SABM|PF:
- if (cr == 0)
+ if (cr == 0) {
+ printk("gsm_queue invalid\n");
goto invalid;
+ }
Example,gsmld receive dlc0 SABM command frame:f9 03 3f 01 1c f9
but gsmld goto invalid.
Kernel test log:
[ 101.794705] c0 gsmld_receive: 00000000: f9 03 3f 01 1c f9
[ 101.803341] c0 <-- 0) C: SABM(P)
[ 101.811371] c0 gsm_queue invalid
Signed-off-by: Zhenguo Zhao <Zhenguo.Zhao1@unisoc.com>
Link: https://lore.kernel.org/r/1629461872-26965-2-git-send-email-zhenguo6858@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/tty/n_gsm.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 1d92d2a84889..25ba5e669fb9 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -1779,7 +1779,7 @@ static void gsm_queue(struct gsm_mux *gsm) switch (gsm->control) { case SABM|PF: - if (cr == 0) + if (cr == 1) goto invalid; if (dlci == NULL) dlci = gsm_dlci_alloc(gsm, address); @@ -1793,7 +1793,7 @@ static void gsm_queue(struct gsm_mux *gsm) } break; case DISC|PF: - if (cr == 0) + if (cr == 1) goto invalid; if (dlci == NULL || dlci->state == DLCI_CLOSED) { gsm_response(gsm, address, DM); |