of_propagate_archdata() walks the children of a bus node and looks each one up with of_find_device_by_node(), documented in drivers/of/platform.c: * Takes a reference to the embedded struct device which needs to be * dropped after use. The reference is never dropped, and because the function recurses, every child node of every ebus leaks the reference to its platform_device. Found by code review. Fixes: 5059625ed886 ("sparc: Add OF archdata propagation helper.") Cc: stable@vger.kernel.org Signed-off-by: Ma Ke --- arch/sparc/kernel/of_device_common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/sparc/kernel/of_device_common.c b/arch/sparc/kernel/of_device_common.c index 7f2f9972b59b..0aae21c4b62c 100644 --- a/arch/sparc/kernel/of_device_common.c +++ b/arch/sparc/kernel/of_device_common.c @@ -70,6 +70,8 @@ void of_propagate_archdata(struct platform_device *bus) if (dp->child) of_propagate_archdata(op); + + platform_device_put(op); } } -- 2.43.0