lkml.org 
[lkml]   [2022]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 394/545] tty: n_gsm: fix wrong T1 retry count handling
    Date
    From: Daniel Starke <daniel.starke@siemens.com>

    [ Upstream commit f30e10caa80aa1f35508bc17fc302dbbde9a833c ]

    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.7.3 states that the valid range for the
    maximum number of retransmissions (N2) is from 0 to 255 (both including).
    gsm_dlci_t1() handles this number incorrectly by performing N2 - 1
    retransmission attempts. Setting N2 to zero results in more than 255
    retransmission attempts.
    Fix gsm_dlci_t1() to comply with 3GPP 27.010.

    Fixes: e1eaea46bb40 ("tty: n_gsm line discipline")
    Signed-off-by: Daniel Starke <daniel.starke@siemens.com>
    Link: https://lore.kernel.org/r/20220707113223.3685-1-daniel.starke@siemens.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    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 969c0de788f8..3f100f7abdb7 100644
    --- a/drivers/tty/n_gsm.c
    +++ b/drivers/tty/n_gsm.c
    @@ -1550,8 +1550,8 @@ static void gsm_dlci_t1(struct timer_list *t)

    switch (dlci->state) {
    case DLCI_OPENING:
    - dlci->retries--;
    if (dlci->retries) {
    + dlci->retries--;
    gsm_command(dlci->gsm, dlci->addr, SABM|PF);
    mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
    } else if (!dlci->addr && gsm->control == (DM | PF)) {
    @@ -1566,8 +1566,8 @@ static void gsm_dlci_t1(struct timer_list *t)

    break;
    case DLCI_CLOSING:
    - dlci->retries--;
    if (dlci->retries) {
    + dlci->retries--;
    gsm_command(dlci->gsm, dlci->addr, DISC|PF);
    mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
    } else
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-19 18:35    [W:4.036 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site