aboutsummaryrefslogtreecommitdiff
path: root/drivers/base
diff options
context:
space:
mode:
authorSakari Ailus2021-12-01 14:59:29 +0200
committerRafael J. Wysocki2021-12-17 18:41:28 +0100
commit4a7f4110f79163fd53ea65438041994ed615e3af (patch)
tree743714a2b0c0da65b9e4878a24df5704f06ce0b2 /drivers/base
parent2338e7bcef445059a99848a3eddde0b556277663 (diff)
device property: Fix fwnode_graph_devcon_match() fwnode leak
For each endpoint it encounters, fwnode_graph_devcon_match() checks whether the endpoint's remote port parent device is available. If it is not, it ignores the endpoint but does not put the reference to the remote endpoint port parent fwnode. For available devices the fwnode handle reference is put as expected. Put the reference for unavailable devices now. Fixes: 637e9e52b185 ("device connection: Find device connections also from device graphs") Cc: 5.1+ <stable@vger.kernel.org> # 5.1+ Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/property.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/base/property.c b/drivers/base/property.c
index d0960a9e8974..b7b3a7b86006 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -1158,8 +1158,10 @@ fwnode_graph_devcon_match(struct fwnode_handle *fwnode, const char *con_id,
fwnode_graph_for_each_endpoint(fwnode, ep) {
node = fwnode_graph_get_remote_port_parent(ep);
- if (!fwnode_device_is_available(node))
+ if (!fwnode_device_is_available(node)) {
+ fwnode_handle_put(node);
continue;
+ }
ret = match(node, con_id, data);
fwnode_handle_put(node);