On Thu, Jun 13, 2024 at 02:14:48PM +0200, Javier Carrasco wrote:
The device_for_each_child_node() macro requires explicit calls to fwnode_handle_put() in all early exits of the loop if the child node is not required outside. Otherwise, the child node's refcount is not decremented and the resource is not released.
The current implementation of pmic_glink_ucsi_probe() makes use of the device_for_each_child_node(), but does not release the child node on early returns. Add the missing calls to fwnode_handle_put().
Cc: stable@vger.kernel.org Fixes: c6165ed2f425 ("usb: ucsi: glink: use the connector orientation GPIO to provide switch events") Signed-off-by: Javier Carrasco javier.carrasco.cruz@gmail.com
This case would be a great opportunity for the recently introduced device_for_each_child_node_scoped(), but given that it has not been released yet, the traditional approach has been used to account for stable kernels (bug introduced with v6.7). A second patch to clean this up with that macro is ready to be sent once this fix is applied, so this kind of problem does not arise if more early returns are added.
This issue has been found while analyzing the code and not tested with hardware, only compiled and checked with static analysis tools. Any tests with real hardware are always welcome.
drivers/usb/typec/ucsi/ucsi_glink.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
Reviewed-by: Dmitry Baryshkov dmitry.baryshkov@linaro.org