Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp209545rdh; Wed, 25 Oct 2023 23:01:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGkrVNJreNvwS5qVnnkkTjYHjd12bKQ6L7w/ovc/EvjWZVp6N2G76UaUVQp6eKiXT2llyDP X-Received: by 2002:a05:6902:514:b0:d85:eac0:c7d2 with SMTP id x20-20020a056902051400b00d85eac0c7d2mr16010164ybs.6.1698300087935; Wed, 25 Oct 2023 23:01:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698300087; cv=none; d=google.com; s=arc-20160816; b=dTfzuAmfZT40ss0LCFN/8WeFqmBG0w4ldw3V1pPuCABGc5QLFZm9OL+04rt/vtZ0PR 9kgTYGeynduGz+PmS6+KcfF6zyld+0qdaHd+Yp+95W8Bg8A67YkswODieg3BCCvrGSoO 4paw5NQdp8beJoVZHcGonHa0HxKjOBBrdsgNVKVrAAww2plnhYC4UlX0RmZ76iH2Fh8v gXKJlVD67UQ+lbeMbSd36FN0E0oLuxV8S+saALN+v66vGRf9151V+sgnRusr6mNA1PFD CwiD7uBmqDZxjF+WTO6XZ6LhKaAfmYSv9zr3e+9fcM0Z+MpeCo5a6cEdsBN/AElm/usp xfKg== 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:message-id:date:subject:cc:to:from:dkim-signature; bh=i3xb5thx0MStC8QddfRm44mVBZo7gXtRg05zVb8PFKg=; fh=5YXR7RtUzZ11YkjdXTzgd3M62+HIxQ5O+Fdh381pAu0=; b=sXi90+sPaGwGIYxEXZzPP/mOkGyQQw65YzNk025b9vZU5uvoe40zvP1MXsw9z/6Zrf NcTnmEsCnUKa4kpm0k8IQ+ZzGf7I+AdyoQRod8vYWAUkysd/CnbyRwyulaCmoj3T5Axx ufjrqfWwCa66B98kUHS3/Dvg7qsm2+Y8XxZFv9Lo4SB0q41kXz9M4caubscjJRwgTLhg erVN69iGoneEWjre/5NYJgTgnj42/2HQChTM4LPBzYZBxJYlVvaYe7EF/iU/zgUIOzns 5jPYJkASR++v7E5W7Z1/bfvVe/SaOOAFoSnBlZ9+2DTjuiqcL7OIHqFvIlEfxWBIjurF eWFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=Yk9TWcAb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id k204-20020a2524d5000000b00d80de4202d8si12457508ybk.36.2023.10.25.23.01.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Oct 2023 23:01:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=Yk9TWcAb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id AA50980D650A; Wed, 25 Oct 2023 23:01:24 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230385AbjJZGBN (ORCPT + 99 others); Thu, 26 Oct 2023 02:01:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230478AbjJZGBM (ORCPT ); Thu, 26 Oct 2023 02:01:12 -0400 X-Greylist: delayed 62 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Wed, 25 Oct 2023 23:01:09 PDT Received: from mta-65-225.siemens.flowmailer.net (mta-65-225.siemens.flowmailer.net [185.136.65.225]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6776213A for ; Wed, 25 Oct 2023 23:01:09 -0700 (PDT) Received: by mta-65-225.siemens.flowmailer.net with ESMTPSA id 202310260600042c81036199cfc14f67 for ; Thu, 26 Oct 2023 08:00: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; bh=i3xb5thx0MStC8QddfRm44mVBZo7gXtRg05zVb8PFKg=; b=Yk9TWcAbRChesErzaiTjGYrKUXMFp+QoYKQtTK3Vu7Thfiou1vhn8n3v2UZJODaJVssXlD DY8CRagUEvSAZAe7FF3GzAG2zFmN42qjnRtch0dVeP7YTrLVbytL36gbu6IRkWuN+58XlrTM KCIC2V4hXgD3CRpelYBJQ8Iiwlck8=; From: "D. Starke" To: linux-serial@vger.kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, ilpo.jarvinen@linux.intel.com Cc: linux-kernel@vger.kernel.org, Daniel Starke Subject: [PATCH 1/2] tty: n_gsm: fix race condition in status line change on dead connections Date: Thu, 26 Oct 2023 07:58:43 +0200 Message-Id: <20231026055844.3127-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=-0.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 25 Oct 2023 23:01:24 -0700 (PDT) From: Daniel Starke gsm_cleanup_mux() cleans up the gsm by closing all DLCIs, stopping all timers, removing the virtual tty devices and clearing the data queues. This procedure, however, may cause subsequent changes of the virtual modem status lines of a DLCI. More data is being added the outgoing data queue and the deleted kick timer is restarted to handle this. At this point many resources have already been removed by the cleanup procedure. Thus, a kernel panic occurs. Fix this by proving in gsm_modem_update() that the cleanup procedure has not been started and the mux is still alive. Note that writing to a virtual tty is already protected by checks against the DLCI specific connection state. Fixes: c568f7086c6e ("tty: n_gsm: fix missing timer to handle stalled links") Signed-off-by: Daniel Starke --- drivers/tty/n_gsm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 1f3aba607cd5..0ee7531c9201 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -4108,6 +4108,8 @@ static int gsm_modem_upd_via_msc(struct gsm_dlci *dlci, u8 brk) static int gsm_modem_update(struct gsm_dlci *dlci, u8 brk) { + if (dlci->gsm->dead) + return -EL2HLT; if (dlci->adaption == 2) { /* Send convergence layer type 2 empty data frame. */ gsm_modem_upd_via_data(dlci, brk); -- 2.34.1