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@vger.kernel.org # 3.19: 9826e393e4a8 Cc: Thierry Reding treding@nvidia.com Cc: Miaoqian Lin linmq006@gmail.com Acked-by: Robin Murphy robin.murphy@arm.com Signed-off-by: Johan Hovold johan@kernel.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