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

Commit be2a1623 authored by David Daney's avatar David Daney Committed by Sasha Levin
Browse files

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



[ Upstream commit 3a496b00b6f90c41bd21a410871dfc97d4f3c7ab ]

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>
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent 825cc961
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);
	}