From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5852248CD48 for ; Thu, 13 Aug 2026 15:31:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635118; cv=none; b=Gvuxb0+0GRMLmg+X4dYOYwpxTST3WIzyGLv3UxNPbWUstxmF10yK+Wbwz/y30hSLUWHFl8qiiqb+/m4L6FUK16acW1o4tWrY0dBJkRkukgiWrpNAx99DKpxanprGbLmdR3y0mYPjbGF6xE2IuATk8OOnGgMmZQPfYYWmw6ELQzU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635118; c=relaxed/simple; bh=uwjEgmG3Mz4miCS0i07ALdjGmAM8jU1gtnrd0zTRvTs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=b4cfHVaANaP6bf6lCJZgDs1ih5HBUfNvXsGtojkO0gODyuq16mTa9q3YW5F9RnlBg6rc2l3ZokAIuzHKK3r62pk5zwKY1/V6rhL+MhV1WBMqbvS9wyZ3/GBI3Ge3uWIRoc4BLhkBd6Ow5CR7hS0bguBeNgsptx5lYGSOR8AuqgQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PUdmGrEk; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PUdmGrEk" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2d02b4c3601so557965ad.3 for ; Thu, 13 Aug 2026 08:31:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786635115; x=1787239915; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=CETj+p+UlhsMV5+bA2H7EPmo/n9prPFe/iRhtcp6S0Q=; b=PUdmGrEkTKFzqEpEBhZTc27IQXS8rXJlHojLQrzO3BU767qUz2uzshqbOAuAIDmIXc 7S6BNgxVUE5mGkxtdLnXi/Jg0c9igHRSDCl6ks4t8sJvs9RVssyBEpY3XlMQXULujG3s kBqLTfpTV26Qx+tC36t7lVp5MzG8el98LSDFeVejhavvhjamWB23LNhoH5kjIsSMrQ8d Tqf8bGIvBD3y6G7uJ2wOarDrdOBFFpmiwEQ7eYLXFT7oTitsMdNduPBSSWqWudKHu89O o6iKeb1MrOiCfOLWncxCFrxLXhIiRQ36XR2D5i7Gi8IjxSGS1TTZUEguzlN7BCap2F+G S4NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786635115; x=1787239915; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CETj+p+UlhsMV5+bA2H7EPmo/n9prPFe/iRhtcp6S0Q=; b=lTc+F/ktvBkhFtSRU5QOHDvhnAJ3vUtu8LVamTkK9rConld2/Pe4e6a5aCC9i3q2Qg rvB5JAp6AlmCv3tRyMMJgg56n0kIPaoHStZqrhedgR3XT0vWmaVPc8lSPP7gXVVfYM1F AGAcV6QCEJOVFDKhOPSrmC5CySlH6263uFQdycjSnpYAkj2WrDQPAx1KFxYksj1icbGP SnrKugYcMZL8kCeXbcQrO9/CMsTeOu5chxamxa3aKbKW2dXqRFt+9RFLhJCE81t8Vobf dRNDh/RI2SLJqzUKYAILLACQqe+jzetPTXphef1BxVKP6JBHEZmky54yYUFNrSY6OCZ4 74qg== X-Forwarded-Encrypted: i=1; AHgh+RrhGH5FjgJ80uzDaK4oTlzUxQ3Z8QwnXkDCKG8MmLk7Kg0NojqP4huryuBY997kBGJnRIj1vHAI2oChZjc=@vger.kernel.org X-Gm-Message-State: AOJu0YyDBJpjbBhXd8OuDTLQelPBBfM9Pagv0VUUXVLd2zSZ3Pi1GK7j EPHmyokx9yzWl6IcmAxYEUFhSbealN1H/Z/k103EUO6CgdkjUfopjg1g X-Gm-Gg: AR+sD13MKvsMG2sBbOgA7mXfGZ33opv5r7V2jxsWHqFCR0IaCXDhUFvFf6V+rK4SrAU sQSi+MdOPTzuZ7bJyPdFAzadvsN7WgN9ko0D+BxHK5ylimnA0ubMszsbtBE466GommRiBC98WSL rFjmWnuIJ3UTSx8//KFqcSoMEvnq7ZKhVDA83GCf6tobdthQTLaQpB907JYyaQt7+kNpvGbLkJ0 Xb1QkdrsvILmKIhxe7UP3tYrdS35K32tG/lM2qo4QjoWJ6gFsRClqTA+UC0AX3u13RRAdalD6wz +gRPPkHJ/IL2PJl0BccSI1M2JSGOlUyTp2gJwxbEBgpxl2qY9E8njc5v2qZ5YbuABe0BlZX12Em ibAoOaZZ7fBe3iKTxjyElXHV5V+K4HXmn8lV6kUFyxAu68LyDwbuWHhSi7Lb2WT8Bv3ny2PPN/T yqinU5I4WEJ8eaIvb+bhUBpCMsB27DrZ7DAzHYz4GO8pB147VENoCChEpXYAXe0U79ftFZ1NRvL TPp/58= X-Received: by 2002:a17:903:19e3:b0:2cc:9179:32e with SMTP id d9443c01a7336-2d37d88d72bmr83848385ad.10.1786635115377; Thu, 13 Aug 2026 08:31:55 -0700 (PDT) Received: from haichao.tail057a43.ts.net ([2001:da8:e000:1206:3b7:6da1:c188:d14f]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d37c200029sm12037965ad.6.2026.08.13.08.31.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Aug 2026 08:31:54 -0700 (PDT) From: Ruoyu Wang To: dmaengine@vger.kernel.org Cc: vkoul@kernel.org, Frank.Li@kernel.org, orsonzhai@gmail.com, baolin.wang@linux.alibaba.com, zhang.lyra@gmail.com, linux-kernel@vger.kernel.org, Ruoyu Wang Subject: [PATCH] dmaengine: sprd: Fix runtime PM reference leak in probe Date: Thu, 13 Aug 2026 23:31:49 +0800 Message-ID: <20260813153149.3953497-1-ruoyuw560@gmail.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit pm_runtime_get_sync() increments a device's usage counter even when it fails. sprd_dma_probe() currently jumps directly to controller clock cleanup on that error, bypassing both pm_runtime_put_noidle() and pm_runtime_disable(). This can happen if the preceding unchecked pm_runtime_set_active() fails and the following runtime-resume attempt also returns an error. Enter the existing runtime-PM unwind path instead. This drops the reference without idling the partially initialized device, disables runtime PM, and then releases the controller clocks. The success path and propagated error code are unchanged. This issue was found by a static analysis checker and confirmed by manual source review. Fixes: 9b3b8171f7f4 ("dmaengine: sprd: Add Spreadtrum DMA driver") Signed-off-by: Ruoyu Wang --- drivers/dma/sprd-dma.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c index 087fea3af2e411..19b32a23c882de 100644 --- a/drivers/dma/sprd-dma.c +++ b/drivers/dma/sprd-dma.c @@ -1212,7 +1212,7 @@ static int sprd_dma_probe(struct platform_device *pdev) ret = pm_runtime_get_sync(&pdev->dev); if (ret < 0) - goto err_rpm; + goto err_register; ret = dma_async_device_register(&sdev->dma_dev); if (ret < 0) { @@ -1234,7 +1234,6 @@ static int sprd_dma_probe(struct platform_device *pdev) err_register: pm_runtime_put_noidle(&pdev->dev); pm_runtime_disable(&pdev->dev); -err_rpm: sprd_dma_disable(sdev); return ret; } -- 2.51.0