Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp897003iob; Wed, 4 May 2022 10:09:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxibQ05SpkpRTepWPr/kT+wjmrA4rkJLMDp0ahKHTOFD3WZoY/n9uSDbpeYQQSgSVCnfqOz X-Received: by 2002:a17:907:7f0f:b0:6f4:310a:73f1 with SMTP id qf15-20020a1709077f0f00b006f4310a73f1mr17351037ejc.110.1651684159632; Wed, 04 May 2022 10:09:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651684159; cv=none; d=google.com; s=arc-20160816; b=HfnobiDRDTUAg0hNm31TfGmOyQTXIpvJEu3HPQ4un5W7WmqZ83b9HZYi97JazEvdD0 H5qgqsNhUbiZvzo27sAPXHxnPgUaCgn5nhSNXAzAZsk+anOEArZH/2EtRqG9WxXnwqGX TfrmOmDMkG2Wwrq9jkU5bMdMByR8EBmW0NVlkIphZLQTNLxcyDSfUT80NG/XT6Q0wNFg yc+7h1ia/z9OcKEYUgC1sXRlvTu+ATT9C5Hb2t1RBCCKBWpyeYYmeaGxjVQ0N3LQ1/oU henetoXIWMrO/sY5EF3xW2wHmy3NvqQpLTBNyMZbu9mE+RofxM2O9dXXBM7wKorICUyE DEyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=givcKcPjIx5sD2l4pl+6VjcrPMHyRzWU5ISndNhsXmE=; b=np+knNYu9cWnjl1WuVifzH54FdrRZSCs8TC/r6taozw0awRb9icN7pxcW5L9TXq87q Q46MG1xXyp7/PH9B4qMmcbVqCPatvk7ZwUl8PSFKO+HC7pKp552Y1MFPpoY/RTnvj7m7 mF8YhOtWTv/RPwWDbqrd1Uqt4PvORd9rzvfK7Dd+ORpXkmVdx/BIyf4+cLMoUuqCu1Vn X7bx13YJzLMmDEwBorBeW0dv8uiX3v1ikzXxjA2snm/uc8yx7lSSf3wjwO4G0484HjwE 66QkewRCJTzyDW3rRmiok4AvyT1bB/xEEtpKDsvRae9+2t4MkCmvgeAXTVJXMJp6kglg ILqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=Uqv1JdNr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hd42-20020a17090796aa00b006f3997f2199si22154694ejc.328.2022.05.04.10.08.55; Wed, 04 May 2022 10:09:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=Uqv1JdNr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237437AbiEDIWJ (ORCPT + 99 others); Wed, 4 May 2022 04:22:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49072 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346152AbiEDIVs (ORCPT ); Wed, 4 May 2022 04:21:48 -0400 Received: from mta-65-226.siemens.flowmailer.net (mta-65-226.siemens.flowmailer.net [185.136.65.226]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B37A62317F for ; Wed, 4 May 2022 01:18:06 -0700 (PDT) Received: by mta-65-226.siemens.flowmailer.net with ESMTPSA id 20220504081804bd89c3fceea64181bf for ; Wed, 04 May 2022 10:18:04 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=daniel.starke@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=givcKcPjIx5sD2l4pl+6VjcrPMHyRzWU5ISndNhsXmE=; b=Uqv1JdNruTqnKaiNdczbMn3KY9J758mW2IfxbjXsfdMN/5m/YyE++8YhwrUKW9D2lATKea cLlWRTCHypejgHj3MuZat3Dn8lvFwzVvn4Sy+vNSjV1Phq28DqVECqq5ZMBLu79OmHmFVQqK grPpItO5O8IO5FpKlqwvqa9PUNA/o=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH 2/3] tty: n_gsm: fix mux activation issues in gsm_config() Date: Wed, 4 May 2022 10:17:32 +0200 Message-Id: <20220504081733.3494-2-daniel.starke@siemens.com> In-Reply-To: <20220504081733.3494-1-daniel.starke@siemens.com> References: <20220504081733.3494-1-daniel.starke@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-314044:519-21489:flowmailer X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Daniel Starke The current implementation activates the mux if it was restarted and opens the control channel if the mux was previously closed and we are now acting as initiator instead of responder, which is the default setting. This has two issues. 1) No mux is activated if we keep all default values and only switch to initiator. The control channel is not allocated but will be opened next which results in a NULL pointer dereference. 2) Switching the configuration after it was once configured while keeping the initiator value the same will not reopen the control channel if it was closed due to parameter incompatibilities. The mux remains dead. Fix 1) by always activating the mux if it is dead after configuration. Fix 2) by always opening the control channel after mux activation. Fixes: e1eaea46bb40 ("tty: n_gsm line discipline") Cc: stable@vger.kernel.org Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 9b0b435cf26e..bcb714031d69 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -2352,6 +2352,7 @@ static void gsm_copy_config_values(struct gsm_mux *gsm, static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c) { + int ret = 0; int need_close = 0; int need_restart = 0; @@ -2419,10 +2420,13 @@ static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c) * FIXME: We need to separate activation/deactivation from adding * and removing from the mux array */ - if (need_restart) - gsm_activate_mux(gsm); - if (gsm->initiator && need_close) - gsm_dlci_begin_open(gsm->dlci[0]); + if (gsm->dead) { + ret = gsm_activate_mux(gsm); + if (ret) + return ret; + if (gsm->initiator) + gsm_dlci_begin_open(gsm->dlci[0]); + } return 0; } -- 2.34.1