• Tobias Klauser's avatar
    nios2: reserve boot memory for device tree · 921d701e
    Tobias Klauser authored
    Make sure to reserve the boot memory for the flattened device tree.
    Otherwise it might get overwritten, e.g. when initial_boot_params is
    copied, leading to a corrupted FDT and a boot hang/crash:
    
      bootconsole [early0] enabled
      Early console on uart16650 initialized at 0xf8001600
      OF: fdt: Error -11 processing FDT
      Kernel panic - not syncing: setup_cpuinfo: No CPU found in devicetree!
    
      ---[ end Kernel panic - not syncing: setup_cpuinfo: No CPU found in devicetree!
    
    Guenter Roeck says:
    
    > I think I found the problem. In unflatten_and_copy_device_tree(), with added
    > debug information:
    >
    > OF: fdt: initial_boot_params=c861e400, dt=c861f000 size=28874 (0x70ca)
    >
    > ... and then initial_boot_params is copied to dt, which results in corrupted
    > fdt since the memory overlaps. Looks like the initial_boot_params memory
    > is not reserved and (re-)allocated by early_init_dt_alloc_memory_arch().
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Reference: http://lkml.kernel.org/r/20170226210338.GA19476@roeck-us.netTested-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarTobias Klauser <tklauser@distanz.ch>
    Acked-by: default avatarLey Foon Tan <ley.foon.tan@intel.com>
    921d701e
setup.c 5.53 KB