diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-01-22 08:37:23 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-01-22 08:37:23 +0100 |
commit | 99ba2ad1db623df79456b8556b3f4900f394c8c2 (patch) | |
tree | 2bf6a20de87f0a5b944fd69d53723fc4710d7b7e /drivers/base/property.c | |
parent | firmware: dmi-sysfs: Fix null-ptr-deref in dmi_sysfs_register_handle (diff) | |
parent | Linux 6.2-rc5 (diff) | |
download | linux-99ba2ad1db623df79456b8556b3f4900f394c8c2.tar.xz linux-99ba2ad1db623df79456b8556b3f4900f394c8c2.zip |
Merge 6.2-rc5 into char-misc-next
We need the char/misc driver fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/property.c')
-rw-r--r-- | drivers/base/property.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/base/property.c b/drivers/base/property.c index bbb3e499ff4a..083a95791d3b 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -997,26 +997,32 @@ struct fwnode_handle * fwnode_graph_get_next_endpoint(const struct fwnode_handle *fwnode, struct fwnode_handle *prev) { + struct fwnode_handle *ep, *port_parent = NULL; const struct fwnode_handle *parent; - struct fwnode_handle *ep; /* * If this function is in a loop and the previous iteration returned * an endpoint from fwnode->secondary, then we need to use the secondary * as parent rather than @fwnode. */ - if (prev) - parent = fwnode_graph_get_port_parent(prev); - else + if (prev) { + port_parent = fwnode_graph_get_port_parent(prev); + parent = port_parent; + } else { parent = fwnode; + } if (IS_ERR_OR_NULL(parent)) return NULL; ep = fwnode_call_ptr_op(parent, graph_get_next_endpoint, prev); if (ep) - return ep; + goto out_put_port_parent; + + ep = fwnode_graph_get_next_endpoint(parent->secondary, NULL); - return fwnode_graph_get_next_endpoint(parent->secondary, NULL); +out_put_port_parent: + fwnode_handle_put(port_parent); + return ep; } EXPORT_SYMBOL_GPL(fwnode_graph_get_next_endpoint); |