Received: by 2002:a05:6358:c692:b0:131:369:b2a3 with SMTP id fe18csp625074rwb; Tue, 25 Jul 2023 23:28:11 -0700 (PDT) X-Google-Smtp-Source: APBJJlETBcNYR9lJ1VPhQEaq/IbsBeEQfsP8l0Z1kTBMyTcNfjrKzrj8Y+/7LOHdVCfF0EmB8d5Y X-Received: by 2002:a05:6402:3c2:b0:522:21fc:5657 with SMTP id t2-20020a05640203c200b0052221fc5657mr719624edw.17.1690352891109; Tue, 25 Jul 2023 23:28:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690352891; cv=none; d=google.com; s=arc-20160816; b=fnuqRWQD1OX5BJEz0qr4hJO2SS3t2hDkFzg7c/ick64uy/huCxKsspFEBGkvI05zhv QP2c6H0MgZ8qqlS3XoL13cmJ8OKI0sbQ2sMzjTPeItdw5otN84FcJa3snxABzFYbZCHp ZLWHkCJkyiw7+t48/RKWNgTKfzkwDmJ5gQ2XbpId3fzncxWIIwAtOF4f5UtM8vZE5zvS S01yQfZzJeHq8XBLcWUy7EMiggcDeMTbuNpL98ztdGlzgvASODDRWfzwIg6sb0F2x3aa a/4h4vRVJtIzXg+yGAWUbyO5Cct1wHeZf7ynao8igp1Kh45cAFlYImVqXBDdjGHbQu9O RJ7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature; bh=M087Fgq0E4MMh1I/cPVwdFNlx/VQvGhOV2RTHu7YaBU=; fh=YtFGQoPcd/jqRhZcCJi2G4/0rwUPVH/ORhZ88cDHnkU=; b=akal5/uszueJbP6MHfns1YRTgi6BZX4UZc+VA+vzrhzjNAOE8bUSxVbsO5kmnPfkMA 2FzMv5STDSNKMJgLBUr2/yu64huI+XU89VdGFK5/wvauBbH2CQkEiwETflhcgSLZA82m WV7dcCTCoXtFOezDIl6rMhz7RXj2gBZWv2jrme6pAlwvQJM4YIFS1WUnOmAb6AJi85Qa D6w4MajP7UCEsa0NL2ofCN91XGxU2I7gVZnltk4BPOu1BohUPMaPKJ7d1NrWU/IqLGAh ao/6IFitON3kU+4QAT01RG0MW9yDcuwy3VH+F3NSCB+rMDPOjga+s+8O/57zUHYR6iml qYJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b="pU6R0/U1"; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k14-20020a05640212ce00b005227524ed19si521478edx.513.2023.07.25.23.27.46; Tue, 25 Jul 2023 23:28:11 -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=@gmail.com header.s=20221208 header.b="pU6R0/U1"; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231335AbjGZE6h (ORCPT + 99 others); Wed, 26 Jul 2023 00:58:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229573AbjGZE6e (ORCPT ); Wed, 26 Jul 2023 00:58:34 -0400 Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93F141BD1; Tue, 25 Jul 2023 21:58:33 -0700 (PDT) Received: by mail-qt1-x82b.google.com with SMTP id d75a77b69052e-4039f0d140eso52276761cf.1; Tue, 25 Jul 2023 21:58:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690347512; x=1690952312; h=message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M087Fgq0E4MMh1I/cPVwdFNlx/VQvGhOV2RTHu7YaBU=; b=pU6R0/U1qgBajf5acm5GN3CJoiqNmkCUunPRrSGqoTE9hdz6stnmgrcZ7JA5Q49a5E JtueY3tREN64bfuHdFaLJvjc6PucraeYC5Pj64fBpE/O3yTtBGP51jYxrObvHk8nPyS9 MLUEvtEnie2H2jcItTbIC2kKyFJZHnqfPz9+FGixCqXnl5EKyRCXc4c2Uc0WCtXg6kdB iRVaDZwLbSBZMYvXupizNn9YWKiaY0mOczUqCZ+MU7wo4xu3a5oQXxlcplwMYGQ25qH5 DGgRyMZY0OKhvvRASDw5vLneZep6G0g2FdoRwsQVnepiKa8iJs9dMMi/1gQjdnARd1m4 ng3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690347512; x=1690952312; h=message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M087Fgq0E4MMh1I/cPVwdFNlx/VQvGhOV2RTHu7YaBU=; b=LD7w1saLov8u5pjp2WL4JHDDvPBkD3uvJ3IUv8PgnmWBkn4ABY+eXsUczt5QjfoxMG WnHP4++AJJ5bj2gFTmkDUDjcSvD10KbbktI37QqOOdKYAvzsaYZF/hdE1nox6kQM93Tm 47jyJkEfqsj7kLyQddlbSTLgE3kA/rxJut+dgyiFdB8IZHyKM5od/BJ2sXUwhkyiqTEU a7+iyJnf/6pRyv1Yb9lNKdebtnqcRn2tTpgI9U9LirEQB8dIDuKiJr/ovxf18AmtdgAx pPErbBgwpuhXUjds0S/Ct3XDvCY/ijpnL6xZe9plZOizU69ymZuO++JwzCuN+dKJXZa4 LeZw== X-Gm-Message-State: ABy/qLax/rJsBWHOeyTZ6aO4rf/Wv1mKtF2ULVquXrmYMcYioi3e4mT1 HhtvtJWYdqmer6M0eaTzWzQ= X-Received: by 2002:a05:622a:211:b0:403:f659:d716 with SMTP id b17-20020a05622a021100b00403f659d716mr1349217qtx.63.1690347512666; Tue, 25 Jul 2023 21:58:32 -0700 (PDT) Received: from 377044c6c369.cse.ust.hk (191host097.mobilenet.cse.ust.hk. [143.89.191.97]) by smtp.gmail.com with ESMTPSA id p6-20020a170902eac600b001bb739e220esm9229001pld.230.2023.07.25.21.58.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jul 2023 21:58:32 -0700 (PDT) From: Chengfeng Ye To: shuge@allwinnertech.com, maxime.ripard@free-electrons.com, vkoul@kernel.org, wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, p.zabel@pengutronix.de Cc: dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Chengfeng Ye Subject: [PATCH] dmaengine: sun6i: Fix potential deadlock on &sdev->lock Date: Wed, 26 Jul 2023 04:58:26 +0000 Message-Id: <20230726045826.49554-1-dg573847474@gmail.com> X-Mailer: git-send-email 2.17.1 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,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 As &sdev->lock is acquired by tasklet sun6i_dma_tasklet() executed under softirq context, other acquisition of the same lock under process context should disable irq, otherwise deadlock could happen if the soft irq preempt the execution while the lock is held in process context on the same CPU. sun6i_dma_terminate_all() and sun6i_dma_pause() callbacks acquire the same lock without disabling irq inside the function. Possible deadlock scenario: sun6i_dma_pause() -> spin_lock(&sdev->lock); -> sun6i_dma_tasklet() -> spin_lock_irq(&sdev->lock) (deadlock here) This flaw was found by an experimental static analysis tool I am developing for irq-related deadlock. The tentative patch fixes the potential deadlock by spin_lock_bh() to disable softirq. Signed-off-by: Chengfeng Ye --- drivers/dma/sun6i-dma.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index ebfd29888b2f..8bad6ce62ea8 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -873,9 +873,9 @@ static int sun6i_dma_pause(struct dma_chan *chan) writel(DMA_CHAN_PAUSE_PAUSE, pchan->base + DMA_CHAN_PAUSE); } else { - spin_lock(&sdev->lock); + spin_lock_bh(&sdev->lock); list_del_init(&vchan->node); - spin_unlock(&sdev->lock); + spin_unlock_bh(&sdev->lock); } return 0; @@ -914,9 +914,9 @@ static int sun6i_dma_terminate_all(struct dma_chan *chan) unsigned long flags; LIST_HEAD(head); - spin_lock(&sdev->lock); + spin_lock_bh(&sdev->lock); list_del_init(&vchan->node); - spin_unlock(&sdev->lock); + spin_unlock_bh(&sdev->lock); spin_lock_irqsave(&vchan->vc.lock, flags); -- 2.17.1