From cd936621379d513bd768319219840b003a45e729 Mon Sep 17 00:00:00 2001 From: Zhenguo Zhao Date: Fri, 20 Aug 2021 20:17:46 +0800 Subject: [PATCH] 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 Link: https://lore.kernel.org/r/1629461872-26965-2-git-send-email-zhenguo6858@gmail.com Signed-off-by: Greg Kroah-Hartman --- drivers/tty/n_gsm.c | 4 ++-- 1 file 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);