]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
lib/genalloc: fix device leak in of_gen_pool_get()
authorJohan Hovold <johan@kernel.org>
Wed, 24 Sep 2025 08:02:07 +0000 (10:02 +0200)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 28 Sep 2025 18:36:13 +0000 (11:36 -0700)
Make sure to drop the reference taken when looking up the genpool platform
device in of_gen_pool_get() before returning the pool.

Note that holding a reference to a device does typically not prevent its
devres managed resources from being released so there is no point in
keeping the reference.

Link: https://lkml.kernel.org/r/20250924080207.18006-1-johan@kernel.org
Fixes: 9375db07adea ("genalloc: add devres support, allow to find a managed pool by device")
Signed-off-by: Johan Hovold <johan@kernel.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Vladimir Zapolskiy <vz@mleia.com>
Cc: <stable@vger.kernel.org> [3.10+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/genalloc.c

index 4fa5635bf81bd6fd829397ec8384ac07f1a101b3..841f2978383334198d724d595087544f2a51b0ef 100644 (file)
@@ -899,8 +899,11 @@ struct gen_pool *of_gen_pool_get(struct device_node *np,
                if (!name)
                        name = of_node_full_name(np_pool);
        }
-       if (pdev)
+       if (pdev) {
                pool = gen_pool_get(&pdev->dev, name);
+               put_device(&pdev->dev);
+       }
+
        of_node_put(np_pool);
 
        return pool;