[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <rp2yiradenf3twznebagx7tgsruwh66exiikal37c4fwo75t4t@4breto65stqt>
Date: Thu, 9 Oct 2025 09:56:18 +0200
From: Thierry Reding <thierry.reding@...il.com>
To: Johan Hovold <johan@...nel.org>
Cc: Joerg Roedel <joro@...tes.org>, Will Deacon <will@...nel.org>,
Robin Murphy <robin.murphy@....com>, Sven Peter <sven@...nel.org>, Janne Grunau <j@...nau.net>,
Rob Clark <robin.clark@....qualcomm.com>, Marek Szyprowski <m.szyprowski@...sung.com>,
Yong Wu <yong.wu@...iatek.com>, Matthias Brugger <matthias.bgg@...il.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>, Chen-Yu Tsai <wens@...e.org>, Krishna Reddy <vdumpa@...dia.com>,
iommu@...ts.linux.dev, linux-kernel@...r.kernel.org, stable@...r.kernel.org,
Thierry Reding <treding@...dia.com>, Miaoqian Lin <linmq006@...il.com>
Subject: Re: [PATCH v2 14/14] iommu/tegra: fix device leak on probe_device()
On Tue, Oct 07, 2025 at 11:43:27AM +0200, Johan Hovold wrote:
> Make sure to drop the reference taken to the iommu platform device when
> looking up its driver data during probe_device().
>
> Note that commit 9826e393e4a8 ("iommu/tegra-smmu: Fix missing
> put_device() call in tegra_smmu_find") fixed the leak in an error path,
> but the reference is still leaking on success.
>
> Fixes: 891846516317 ("memory: Add NVIDIA Tegra memory controller support")
> Cc: stable@...r.kernel.org # 3.19: 9826e393e4a8
> Cc: Thierry Reding <treding@...dia.com>
> Cc: Miaoqian Lin <linmq006@...il.com>
> Acked-by: Robin Murphy <robin.murphy@....com>
> Signed-off-by: Johan Hovold <johan@...nel.org>
> ---
> drivers/iommu/tegra-smmu.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
> index 36cdd5fbab07..f6f26a072820 100644
> --- a/drivers/iommu/tegra-smmu.c
> +++ b/drivers/iommu/tegra-smmu.c
> @@ -830,10 +830,9 @@ static struct tegra_smmu *tegra_smmu_find(struct device_node *np)
> return NULL;
>
> mc = platform_get_drvdata(pdev);
> - if (!mc) {
> - put_device(&pdev->dev);
> + put_device(&pdev->dev);
> + if (!mc)
> return NULL;
> - }
>
> return mc->smmu;
pdev->dev is what's backing mc, so if we use put_device() here, then the
MC could go away at any time, right?
So the goal here was to make sure that the MC stays around during the
entire lifetime of the IOMMU attachment. We don't currently release that
reference, ever, so there is a leak, but wouldn't it be more appropriate
to release it in a .release_device implementation?
Thierry
Download attachment "signature.asc" of type "application/pgp-signature" (834 bytes)
Powered by blists - more mailing lists