Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a496b00 authored by David Daney's avatar David Daney Committed by Rob Herring
Browse files

of/address: Don't loop forever in of_find_matching_node_by_address().



If the internal call to of_address_to_resource() fails, we end up
looping forever in of_find_matching_node_by_address().  This can be
caused by a defective device tree, or calling with an incorrect
matches argument.

Fix by calling of_find_matching_node() unconditionally at the end of
the loop.

Signed-off-by: default avatarDavid Daney <david.daney@cavium.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent 068627a5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -845,10 +845,10 @@ struct device_node *of_find_matching_node_by_address(struct device_node *from,
	struct resource res;

	while (dn) {
		if (of_address_to_resource(dn, 0, &res))
			continue;
		if (res.start == base_address)
		if (!of_address_to_resource(dn, 0, &res) &&
		    res.start == base_address)
			return dn;

		dn = of_find_matching_node(dn, matches);
	}