Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp8754407pxu; Sun, 27 Dec 2020 18:56:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJx4273jCIgbH+rOpjx/wOONcOaDBZFGARBKOfBwRj2G3DlFhMP8/RZmLTTirOb3GlBDW38h X-Received: by 2002:aa7:c84c:: with SMTP id g12mr39898028edt.193.1609124178835; Sun, 27 Dec 2020 18:56:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1609124178; cv=none; d=google.com; s=arc-20160816; b=wBxa0FB5A3ozMy714WzUsUjA+7blzMdB0iPP6TykDMOmmjrhF2MQ6prwsaA0tDX7n9 EYU/O6MX6oJIi2/WdwYQJ5auoFiL0/CvOaZv4Dj0zcN12ljdYwTq5duwChlHQRhZVTyW 4rjFZkY6msyAFbOUSlrtKAD14RKk7TrbG2stVOLf3hLUSYO45yezDMwwEn38DrzdBWUF mEJqkJtfmDQbxXdbm1m6uXln6gle2OVDlId39Fqy+kZrMTi6UhhKZIUaeVrt3wdl15B4 PuRoFU7Wy3nAwaqdVx0ANZPhcPKlugVDSn0WqpZ9ZmXr24JyDbOPF5g5Jy9OQa5PSMy1 MOVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=Y9GjcdWdDXwMVCPh4R/oYm+2IT0dwMb9tBB+uvycjjY=; b=SSyewMLjmg0Xvs5Q08cuZwhGL86LD5hEheVyk3UklaS8Qg89VPVBdDTsOyv5bDXlJi Ug/EQH3HvG2lqrPYLXy6IAU5jxjVgROFhDfDvMK4pR2tykywj/Pz/PDy/Z+MyXJKyH7/ nEpFjB3EDfl/0K+YUQy/P0HCmorX7nOd2Kv9IntWJhSP3xg4y9vMS01332513hzCKfl+ pieL95GVy/w73moojhb1PV9fR2ReCdDH9e6+jIiQsjLmCsJx7QF7r6GzITTs4W2jaa5K GQCGUR10XeFnhTJaCMlS8Qz8QEGitZOPFMz/z1dwLI2GLWNOlfXEEzDTqI4AXojryZRZ N+OQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="l4he/Zrd"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d14si20146305edj.545.2020.12.27.18.55.56; Sun, 27 Dec 2020 18:56:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="l4he/Zrd"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726408AbgL1Cyd (ORCPT + 99 others); Sun, 27 Dec 2020 21:54:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39540 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726289AbgL1Cyc (ORCPT ); Sun, 27 Dec 2020 21:54:32 -0500 Received: from mail-pf1-x436.google.com (mail-pf1-x436.google.com [IPv6:2607:f8b0:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B09CEC061794; Sun, 27 Dec 2020 18:53:52 -0800 (PST) Received: by mail-pf1-x436.google.com with SMTP id h186so5605741pfe.0; Sun, 27 Dec 2020 18:53:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Y9GjcdWdDXwMVCPh4R/oYm+2IT0dwMb9tBB+uvycjjY=; b=l4he/Zrdd8dEAvIQeOJrYq5TwY3Ue9Ac0Jbj1lBgvPCYkCVWuqZjJwM2b3M1MN/Epb axdGL6/adhs4+V1u49MGNqkANkVhFjH0RfH3ypPBYG9EGx2Dromy3BXrMAj4uHDkvrcJ L8JGAFXogegZ2VjDQkpHsfKxrEVOsyxzrgx037xjqF6ntEYgWAtH/EqQ2iI0Pugthh+o zIdnjNNsNrUcXw/wrIPc8yJqGybwSK3eXFMNwEDrXu1ECil+2hpy9MnFEA8HOEiNJEf1 3WXqSmDkRQHP9G7sj0246rHZAIUItkvd97keN7AstN4yJmhn2deIo/3CibVN7p/VXb9v uxxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Y9GjcdWdDXwMVCPh4R/oYm+2IT0dwMb9tBB+uvycjjY=; b=saEHyxZF+iJw6xew5ESly4zuEHaN3HPL5GpQho0frjyhmMc3KTLOS+1xJgQj6N5YoW W9sOZCzTinkYudURvA2EzmkI5oYI0i9bEwJLHV8reDbNJzaqgdUPPx4VAXT0uB8Ot7cD hybojQQSAB5KasVcXs/m1Q1dp6xECH4cksWJ6ZJWSwVgl5YyI6u0uqr86PnGSoWpqms1 zsv25CHR5H+RbAQD73iTsgDv20R7AFiFXHuY8kMeClIJe5QToQ4pRC/3/0ZdgdaYVhBP Tuc0LvAaUObYowO8ApuhZ1N3Uo/1MU0EyU2BD13W38eGqf3RWH6aLIlhlOGXYKghNWRV kahA== X-Gm-Message-State: AOAM5318Dd0GqagY84YtkfWC9Eber6p4sPd9bWAusqHhLFubadF/pMc5 y02yEgxSmVzyYdh4LQDvCUQ= X-Received: by 2002:a62:3503:0:b029:1aa:6f15:b9fe with SMTP id c3-20020a6235030000b02901aa6f15b9femr39125193pfa.65.1609124032133; Sun, 27 Dec 2020 18:53:52 -0800 (PST) Received: from shane-XPS-13-9380.hsd1.ca.comcast.net ([2601:646:8800:1c00:feaa:4103:8c8c:bf1]) by smtp.gmail.com with ESMTPSA id w1sm12425173pjt.23.2020.12.27.18.53.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Dec 2020 18:53:51 -0800 (PST) From: Xie He To: "David S. Miller" , Jakub Kicinski , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Krzysztof Halasa Cc: Xie He Subject: [PATCH net v2] net: hdlc_ppp: Fix issues when mod_timer is called while timer is running Date: Sun, 27 Dec 2020 18:53:39 -0800 Message-Id: <20201228025339.3210-1-xie.he.0141@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ppp_cp_event is called directly or indirectly by ppp_rx with "ppp->lock" held. It may call mod_timer to add a new timer. However, at the same time ppp_timer may be already running and waiting for "ppp->lock". In this case, there's no need for ppp_timer to continue running and it can just exit. If we let ppp_timer continue running, it may call add_timer. This causes kernel panic because add_timer can't be called with a timer pending. This patch fixes this problem. Fixes: e022c2f07ae5 ("WAN: new synchronous PPP implementation for generic HDLC.") Cc: Krzysztof Halasa Signed-off-by: Xie He --- drivers/net/wan/hdlc_ppp.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/wan/hdlc_ppp.c b/drivers/net/wan/hdlc_ppp.c index 64f855651336..261b53fc8e04 100644 --- a/drivers/net/wan/hdlc_ppp.c +++ b/drivers/net/wan/hdlc_ppp.c @@ -569,6 +569,13 @@ static void ppp_timer(struct timer_list *t) unsigned long flags; spin_lock_irqsave(&ppp->lock, flags); + /* mod_timer could be called after we entered this function but + * before we got the lock. + */ + if (timer_pending(&proto->timer)) { + spin_unlock_irqrestore(&ppp->lock, flags); + return; + } switch (proto->state) { case STOPPING: case REQ_SENT: -- 2.27.0