From nobody Mon Sep 28 15:34:43 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 3BBB13290D9 for ; Thu, 20 Aug 2026 13:56:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787234179; cv=none; b=F/BnIf+kaerd0myuEv+xHSUKaF+9elg9ZWcHgcq/40jpxSC9ZhubRM/C4pMvWmO0R4xlAMcT9MHRqxX1zVcHIZnlxS7SId6jhTlZfi9lMmqPiV2XgOf8lOSexg5a+BhG9oMb5OfMsGeei6/i8W/vlmxSKGAkyNJdJAIasZGz5/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787234179; c=relaxed/simple; bh=4cZIFkW46IB/x5YXpPxXdJxnBup5CaAIGlCAGwvwZ0U=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=GKQBAxuVy/tDn0tfZsOGddkEjWSCB+BdvAsXxmjFfVyDbT2MPG3gfRpYfueupXTPW3uOHalKJO4k2P0oG7thzZAKQMar1pahKx2bKpX67JTDGB9mIA7HlhYNUEhTWq5JxikXpcBiBZavj6YTsEAp5LvKBQgGrlkaDQxtxGMB/ig= 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=dIg3kVZf; arc=none smtp.client-ip=209.85.214.176 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="dIg3kVZf" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2cf6d65d8a7so25135185ad.0 for ; Thu, 20 Aug 2026 06:56:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787234177; x=1787838977; 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=Ne4vpn6S8dDIeQGKLcmrAac8qYrgoBlC4Ci88bD6Wpk=; b=dIg3kVZfiQ3nk941uh14z4ZKNudSP5zIYYnnZQTPjMKWBqrqtJUeZWy/iipWe+yKmk oEmjOVW1L+OnAIvEDLz7lg4LHon1CNKw16PO4qquj2Pp274aL1B6AVb0QkCAyH+YfuDS VeS1dsiEh+SsXu5HsXp1bDDGwwgoLahZsKu7uv70bIJD4v/1iWcdOo4NFCQ7K5Rc81oN XIvh/JiF31B9zCUdcPXZ9svVvS5XRPHqNVobHXAx/rV+njt1SrDzw1Gz9VIM9US2Lv5K P/OaJvxHN8c90Jh0l+PKOH5eo3Dy6yEGT2l5mfvjSfgIlli9cbju1XbVI7p+wY8Htl4I uL3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787234177; x=1787838977; 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=Ne4vpn6S8dDIeQGKLcmrAac8qYrgoBlC4Ci88bD6Wpk=; b=oXYASeChs1cSxE3bAoNaOsxfaE8yGlxiCF5wk86Xb/UliR2VdJGAZJKsJP4Pu7gBrS vFmkq7sWIn60gfspzbwdpWS98itshCT8G7rJwf9UIBg2tN2jRdlxx6Ro5W/fdQLTlXfr NG+FG+OUoKn9fbuPnQgzAb/Z5rGRJbnToQt7YticTInWiw8C40+lR42tzDPasTTiqQvQ dtn8b4zpMl2tpBsHMTeM0BDeLRq0wCVbFgxmk5X7l2Bed+SnqwToApqc+1o3r5xA0UCW hRSHU1RzlqdgatO1AezSgndZUa/tuO5zIDoe12oH9/v+7v+kG3BjoNY9O+kZYI23qTvf Ny6w== X-Forwarded-Encrypted: i=1; AHgh+RqaJiPUzNAKr2PfTZdOqqJxQc52V4SKEE1tEG6rIIP/tSb89AQ58sWgZ3KheJ9IDLhA35uUCYcbGLc2MH0=@vger.kernel.org X-Gm-Message-State: AFuF++kLXg2ayDS6n8CxzsrTBNn6nTSDEtZVdccFqF1xlYKSlB6ZV6dq 43dnuuvbVeXXrt7afwlh7KeT2H0di5gw77isgb/8dE+Pv8CDbVmkQj/2 X-Gm-Gg: AR+sD137o7+iR/LjN6s+lbMb8lPEqGcdqG4u/BcDppDaqeS4Hf9VU/n2SD867erZYhO QUpwJ0Byc/Myya4/t6zOwWxA+SI/rEhhFJotZpDV0xOwI7uM0iagSYr6Mfpr+SGU7hA8xceqDFY qd0fz2yRwQXB+rhgk4Yeq+Vk/90Gb9kLpDG84VrjBkE3keBG5K8/RyN3pGpV4+t7rkT18OPvdSH SfMxgOUXul5RN2vrDJDrtSkUJRjUzw1KNlw0rc9OFijO+eqphMNQUOPyPSTtQRN/5RVwilzO09v Rtcq2k+99/tcsoUrkZCwu/g41a5/2mZpUq2gtREaBW4Mrx94RF33EFL9uVdC+X6XPPEUY2HKKGR ubp0jr8zWSidpOai+CnFFEZw7J6dB71eEo9g0hBfNcNwlHnoODwdWwrmnUaQaS8aSYYBsp/Ifxr xWHu8R/FcMd8RNfFXkut5K4U1HUo/B6wyeLVmTnNbbSpXKdD0yJsDXPzy/f/m/ofEIBuqlOe8If y6pp5bA X-Received: by 2002:a17:902:e551:b0:2ce:93a3:c168 with SMTP id d9443c01a7336-2d5fd7147cdmr238498905ad.7.1787234177379; Thu, 20 Aug 2026 06:56:17 -0700 (PDT) Received: from haichao.tail057a43.ts.net ([2001:da8:e000:1206:85a4:b9cf:b578:4307]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d62e36e1e3sm7476405ad.44.2026.08.20.06.56.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 06:56:16 -0700 (PDT) From: Ruoyu Wang To: Shuai Xue , Jing Zhang , Will Deacon , Mark Rutland , Yunhui Cui , Markus Elfring Cc: linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Ruoyu Wang Subject: [PATCH v2] perf/dwc_pcie: Fix PCI device reference leak in probe Date: Thu, 20 Aug 2026 21:56:11 +0800 Message-ID: <20260820135611.3901886-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: quoted-printable Content-Type: text/plain; charset="utf-8" pci_get_domain_bus_and_slot() returns a referenced PCI device. When the subsequent RAS DES capability lookup fails, dwc_pcie_pmu_probe() returns -ENODEV without releasing that reference. Repeated failed probes can therefore keep the PCI device allocated after removal. Declare the looked-up device with __free(pci_dev_put), so the temporary reference is released on every return path. Keeping the reference scoped to the whole probe also covers all later uses of the device during initialization. This issue was found by a static analysis checker and confirmed by manual source review. Fixes: 7f35b429802a ("perf/dwc_pcie: fix duplicate pci_dev devices") Suggested-by: Markus Elfring Signed-off-by: Ruoyu Wang --- Changes in v2: - Manage the lookup reference with __free(pci_dev_put). - Keep the reference scoped through the complete probe. Link: https://lore.kernel.org/r/20260814133925.1385687-1-ruoyuw560@gmail.co= m/ --- drivers/perf/dwc_pcie_pmu.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/perf/dwc_pcie_pmu.c b/drivers/perf/dwc_pcie_pmu.c index 5385401fa9cf6..0e69bd71c3e61 100644 --- a/drivers/perf/dwc_pcie_pmu.c +++ b/drivers/perf/dwc_pcie_pmu.c @@ -694,16 +694,16 @@ static struct notifier_block dwc_pcie_pmu_nb =3D { =20 static int dwc_pcie_pmu_probe(struct platform_device *plat_dev) { - struct pci_dev *pdev; + u32 sbdf =3D plat_dev->id; + struct pci_dev *pdev __free(pci_dev_put) =3D + pci_get_domain_bus_and_slot(sbdf >> 16, + PCI_BUS_NUM(sbdf & 0xffff), + sbdf & 0xff); struct dwc_pcie_pmu *pcie_pmu; char *name; - u32 sbdf; u16 vsec; int ret; =20 - sbdf =3D plat_dev->id; - pdev =3D pci_get_domain_bus_and_slot(sbdf >> 16, PCI_BUS_NUM(sbdf & 0xfff= f), - sbdf & 0xff); if (!pdev) { pr_err("No pdev found for the sbdf 0x%x\n", sbdf); return -ENODEV; @@ -713,7 +713,6 @@ static int dwc_pcie_pmu_probe(struct platform_device *p= lat_dev) if (!vsec) return -ENODEV; =20 - pci_dev_put(pdev); name =3D devm_kasprintf(&plat_dev->dev, GFP_KERNEL, "dwc_rootport_%x", sb= df); if (!name) return -ENOMEM; --=20 2.51.0