• R
    drivers/of: Fix depth when unflattening devicetree · 78c44d91
    Rhyland Klein 提交于
    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: 50800082 ("drivers/of: Avoid recursively calling unflatten_dt_node()")
    Signed-off-by: NRhyland Klein <rklein@nvidia.com>
    [robh: squashed in KASAN fix from Rhyland]
    Signed-off-by: NRob Herring <robh@kernel.org>
    78c44d91
fdt.c 31.6 KB