Re: [PATCH] device property: fix of node refcount leak in fwnode_graph_get_next_endpoint()
From: Andy Shevchenko
Date: Mon Nov 21 2022 - 05:22:17 EST
On Mon, Nov 21, 2022 at 02:40:49PM +0800, Yang Yingliang wrote:
> The 'parent' returned by fwnode_graph_get_port_parent() with refcount
> incremented when prev is not null, it needs be put when finish using
> it.
...
> ep = fwnode_call_ptr_op(parent, graph_get_next_endpoint, prev);
> - if (ep)
> + if (ep) {
> + if (prev)
> + fwnode_handle_put((struct fwnode_handle *)parent);
Instead of castings, drop the const qualifier in the definition block.
> return ep;
> + }
But, the point is that this is a very tricky code and your commit message
lacks of analysis. Can you extend it and show that every case is covered
correctly?
> - return fwnode_graph_get_next_endpoint(parent->secondary, NULL);
> + ep = fwnode_graph_get_next_endpoint(parent->secondary, NULL);
> + if (prev)
Instead you might consider to replace
parent = fwnode;
by
parent = fwnode_handle_get(fwnode);
but please double check that each branch has proper reference counting.
> + fwnode_handle_put((struct fwnode_handle *)parent);
> + return ep;
--
With Best Regards,
Andy Shevchenko