device property: Fix fwnode_graph_devcon_match() fwnode leak
authorSakari Ailus <sakari.ailus@linux.intel.com>
Wed, 1 Dec 2021 12:59:29 +0000 (14:59 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 17 Dec 2021 17:41:28 +0000 (18:41 +0100)
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>
drivers/base/property.c

index d0960a9e89741698132e005f4fb26a17ed736c0a..b7b3a7b8600601fcf62bcd11d00a21351809920d 100644 (file)
@@ -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);