linux/drivers/of
Rhyland Klein 78c44d910d drivers/of: Fix depth when unflattening devicetree
When the implementation for unflatten_dt_node() changed from being
recursive to being non-recursive, it had a side effect of increasing the
depth passed to fdt_next_node() by 1. This is fine most of the time, but
it seems that when the end of the dtb is being parsed, it will cause the
FDT_END condition in fdt_next_node() to return a different value
(returning nextoffset instead of -FDT_ERR_NOTFOUND). This ends up passing
an FDT_ERR_TRUNCATED error back to the unflatten_dt_node() which then
sees that and complains "Error -8 processing FDT" causing boot to fail.

This patch simply avoids incrementing depth and uses modified accesses
for local array indices so that the depth is the same as it was before
the change as far as fdt_next_node() is concerned.

This problem was discovered trying to boot Tegra210-Smaug platforms.

Fixes: 50800082f1 ("drivers/of: Avoid recursively calling unflatten_dt_node()")
Signed-off-by: Rhyland Klein <rklein@nvidia.com>
[robh: squashed in KASAN fix from Rhyland]
Signed-off-by: Rob Herring <robh@kernel.org>
2016-05-19 09:15:14 -05:00
..
unittest-data of/unittest: replace 'selftest' with 'unittest' 2015-03-25 00:53:29 -05:00
address.c DeviceTree updates for 4.5: 2016-01-14 11:13:28 -08:00
base.c of: document refcount incrementation of of_get_cpu_node() 2016-04-25 10:06:39 -05:00
device.c of: to support binding numa node to specified device in devicetree 2015-10-17 22:11:50 -07:00
dynamic.c of: dynamic: changeset prop-update revert fix 2016-05-16 07:29:12 -05:00
fdt_address.c of: earlycon: Move address translation to of_setup_earlycon() 2016-02-06 22:07:37 -08:00
fdt.c drivers/of: Fix depth when unflattening devicetree 2016-05-19 09:15:14 -05:00
irq.c of/irq: Fix msi-map calculation for nonzero rid-base 2016-02-11 16:51:41 -06:00
Kconfig of: add config option to enable building of all dtbs 2015-10-27 16:12:13 -05:00
Makefile of: clean-up unnecessary libfdt include paths 2015-06-04 20:16:47 -05:00
of_mdio.c of_mdio: use PTR_ERR_OR_ZERO() 2016-03-14 15:31:58 -04:00
of_mtd.c of_mtd: Add helpers to get ECC strength and ECC step size 2014-03-10 22:42:28 -07:00
of_net.c of_net: factor out repetitive code from of_get_mac_address() 2015-03-29 08:56:17 +01:00
of_pci_irq.c of_pci_irq: Silence bogus "of_irq_parse_pci() failed ..." messages. 2015-09-17 14:46:11 -05:00
of_pci.c PCI: Remove includes of empty asm-generic/pci-bridge.h 2016-02-05 16:28:36 -06:00
of_private.h drivers/of: Export OF changeset functions 2016-01-13 16:10:37 -06:00
of_reserved_mem.c of: alloc anywhere from memblock if range not specified 2016-03-03 16:50:30 -06:00
overlay.c drivers/of: Export OF changeset functions 2016-01-13 16:10:37 -06:00
pdt.c of: Eliminate of_allnodes list 2014-11-04 13:29:38 +00:00
platform.c of/platform: export of_default_bus_match_table 2016-01-05 09:20:44 -06:00
resolver.c of: resolver: Add missing of_node_get and of_node_put 2016-02-13 13:35:32 -06:00
unittest.c drivers/of: Specify parent node in of_fdt_unflatten_tree() 2016-05-16 07:22:35 -05:00