1. 10 8月, 2016 1 次提交
    • G
      drivers/of: Validate device node in __unflatten_device_tree() · 89c67752
      Gavin Shan 提交于
      @mynodes is set to NULL when __unflatten_device_tree() is called
      to unflatten device sub-tree in PCI hot add scenario on PowerPC
      PowerNV platform. Marking @mynodes detached unconditionally causes
      kernel crash as below backtrace shows:
      
      Unable to handle kernel paging request for data at address 0x00000000
      Faulting instruction address: 0xc000000000b26f64
      cpu 0x0: Vector: 300 (Data Access) at [c000003fcc7cf740]
          pc: c000000000b26f64: __unflatten_device_tree+0xf4/0x190
          lr: c000000000b26f40: __unflatten_device_tree+0xd0/0x190
          sp: c000003fcc7cf9c0
         msr: 900000000280b033
         dar: 0
       dsisr: 40000000
        current = 0xc000003fcc281680
        paca    = 0xc00000000ff00000	 softe: 0	 irq_happened: 0x01
          pid   = 2724, comm = sh
      Linux version 4.7.0-gavin-07754-g92a6836 (gwshan@gwshan) (gcc version \
      4.9.3 (Buildroot 2016.02-rc2-00093-g5ea3bce) ) #539 SMP Mon Aug 1 \
      12:40:29 AEST 2016
      enter ? for help
      [c000003fcc7cfa50] c000000000b27060 of_fdt_unflatten_tree+0x60/0x90
      [c000003fcc7cfaa0] c0000000004c6288 pnv_php_set_slot_power_state+0x118/0x440
      [c000003fcc7cfb80] c0000000004c6a10 pnv_php_enable+0xc0/0x170
      [c000003fcc7cfbd0] c0000000004c4d80 power_write_file+0xa0/0x190
      [c000003fcc7cfc50] c0000000004be93c pci_slot_attr_store+0x3c/0x60
      [c000003fcc7cfc70] c0000000002d3fd4 sysfs_kf_write+0x94/0xc0
      [c000003fcc7cfcb0] c0000000002d2c30 kernfs_fop_write+0x180/0x260
      [c000003fcc7cfd00] c000000000230fe0 __vfs_write+0x40/0x190
      [c000003fcc7cfd90] c000000000232278 vfs_write+0xc8/0x240
      [c000003fcc7cfde0] c000000000233d90 SyS_write+0x60/0x110
      [c000003fcc7cfe30] c000000000009524 system_call+0x38/0x108
      
      This avoids the kernel crash by marking @mynodes detached only when
      @mynodes is dereferencing valid device node in __unflatten_device_tree().
      
      Fixes: 1d1bde55 ("of: fdt: mark unflattened tree as detached")
      Reported-by: NMeng Li <shlimeng@cn.ibm.com>
      Signed-off-by: NGavin Shan <gwshan@linux.vnet.ibm.com>
      Signed-off-by: NRob Herring <robh@kernel.org>
      89c67752
  2. 19 7月, 2016 2 次提交
  3. 06 7月, 2016 1 次提交
  4. 10 6月, 2016 1 次提交
  5. 19 5月, 2016 2 次提交
    • G
      drivers/of: Fix build warning in populate_node() · dddc33e5
      Gavin Shan 提交于
      Function populate_node() is used to unflatten FDT blob to device
      tree. It supports maximal 64 level of device nodes. There is one
      array @fpsizes[64] tracking the full name length of last unflattened
      device node in the corresponding level (index of element in the
      array - 1). Build warning is seen with CONFIG_FRAME_WARN=1024 like
      below on ARM64 as Geert reported. The issue can be reproduced on
      PPC64 as well.
      
        $ make drivers/of/fdt.o
        drivers/of/fdt.c:443:1: warning: the frame size of 1136 bytes is \
        larger than 1024 bytes [-Wframe-larger-than=]
      
      This changes the data type of @fpsizes[i] from "unsigned long" to
      "unsigned int" to avoid the build warning. The return value type
      of populate_node() and its @fpsize argument is adjusted accordingly.
      With this applied, 256 bytes saved from the stack frame on ARM64 and
      PPC64 platforms and the above warning isn't seen.
      
      Fixes: 50800082 ("drivers/of: Avoid recursively calling unflatten_dt_node()")
      Reported-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: NGavin Shan <gwshan@linux.vnet.ibm.com>
      Signed-off-by: NRob Herring <robh@kernel.org>
      dddc33e5
    • 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
  6. 16 5月, 2016 5 次提交
  7. 20 4月, 2016 1 次提交
  8. 19 2月, 2016 2 次提交
  9. 07 2月, 2016 6 次提交
  10. 08 12月, 2015 1 次提交
    • G
      of/fdt: Add mutex protection for calls to __unflatten_device_tree() · f8062386
      Guenter Roeck 提交于
      __unflatten_device_tree() calls unflatten_dt_node(), which declares
      a static variable. It is therefore not reentrant.
      
      One of the callers of __unflatten_device_tree(), unflatten_device_tree(),
      is only called once during early initialization and does not need to be
      protected. The other caller, of_fdt_unflatten_tree(), can be called at
      any time, possibly multiple times in parallel. This can happen, for
      example, if multiple devicetree overlays have to be loaded and installed.
      
      Without this protection, errors such as the following may be seen.
      
      kernel: End of tree marker overwritten: e6a3a458
      kernel: find_target_node:
      	Failed to find target-indirect node at /fragment@0
      kernel: __of_overlay_create: of_build_overlay_info() failed for tree@/
      
      Add a mutex to of_fdt_unflatten_tree() to make the call reentrant.
      
      Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
      Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
      Cc: stable@vger.kernel.org # v4.1+
      Signed-off-by: NRob Herring <robh@kernel.org>
      f8062386
  11. 01 12月, 2015 1 次提交
  12. 31 10月, 2015 1 次提交
  13. 28 10月, 2015 1 次提交
  14. 14 10月, 2015 1 次提交
    • S
      of/fdt: fix aliases with baudrate in earlycon · 6296ad9e
      Stefan Agner 提交于
      Many boards use an alias in the stdout-path specification along
      with console options after a colon (e.g. serial0:115200n8). When
      using earlycon, this specification currently does not work. While
      fdt_path_offset supports alias resolution, it does not remove the
      console options by itself. Use the fdt_path_offset_namelen variant
      and provide the length of the alias to enable aliases with console
      options in the stdout-path.
      Signed-off-by: NStefan Agner <stefan@agner.ch>
      Signed-off-by: NRob Herring <robh@kernel.org>
      6296ad9e
  15. 24 8月, 2015 1 次提交
  16. 19 6月, 2015 1 次提交
    • R
      dt/fdt: add empty versions of early_init_dt_*_memory_arch · aefc7ec2
      Rob Herring 提交于
      With the addition of commit 0166dc11 (of: make CONFIG_OF user
      selectable), architectures which don't enable memblock and don't
      have their own early_init_dt_*_memory_arch implementations will break
      when CONFIG_OF is enabled.
      
      Really, we should have better separation of CONFIG_OF and
      CONFIG_OF_EARLY_FLATTREE, but doing that will require quite a bit of
      shuffling of architecture code. That will have to wait for another day.
      Signed-off-by: NRob Herring <robh@kernel.org>
      Cc: Grant Likely <grant.likely@linaro.org>
      aefc7ec2
  17. 04 6月, 2015 1 次提交
  18. 02 6月, 2015 1 次提交
  19. 29 5月, 2015 1 次提交
  20. 15 4月, 2015 3 次提交
  21. 05 2月, 2015 1 次提交
  22. 04 12月, 2014 1 次提交
    • G
      of: Drop ->next pointer from struct device_node · 70161ff3
      Grant Likely 提交于
      The ->next pointer in struct device_node is a hanger-on from when it was
      used to iterate over the whole tree by a particular device_type property
      value. Those days are long over, but the fdt unflattening code still
      uses it to put nodes in the unflattened tree into the same order as node
      in the flat tree. By reworking the unflattening code to reverse the list
      after unflattening all the children of a node, the pointer can be
      dropped which gives a small amount of memory savings.
      Signed-off-by: NGrant Likely <grant.likely@linaro.org>
      Acked-by: NFrank Rowand <frank.rowand@sonymobile.com>
      Cc: Gaurav Minocha <gaurav.minocha.os@gmail.com>
      70161ff3
  23. 26 11月, 2014 1 次提交
    • I
      of/fdt: memblock_reserve /memreserve/ regions in the case of partial overlap · 094cb981
      Ian Campbell 提交于
      memblock_is_region_reserved() returns true in the case of a partial
      overlap, meaning that the current code fails to reserve the
      non-overlapping portion.
      
      This call was introduced as part of d1552ce4 "of/fdt: move
      memreserve and dtb memory reservations into core" which went into
      v3.16.
      
      I observed this causing a Midway system with a buggy fdt (the header
      declares itself to be larger than it really is) failing to boot
      because the over-inflated size of the fdt was causing it to seem to
      run into the swapper_pg_dir region, meaning the DT wasn't reserved.
      The symptoms were failing to find an disks or network and failing to
      boot.
      
      However given the ambiguity of whether things like the initrd are
      covered by /memreserve/ and similar I think it is best to also
      register the region rather than just ignoring it.
      
      Since memblock_reserve() handles overlaps just fine lets just warn and
      carry on.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      Signed-off-by: NGrant Likely <grant.likely@linaro.org>
      Cc: Rob Herring <robh+dt@kernel.org>
      Cc: stable@vger.kernel.org # v3.16+
      094cb981
  24. 19 11月, 2014 2 次提交
    • A
      of/fdt: export fdt blob as /sys/firmware/fdt · 08d53aa5
      Ard Biesheuvel 提交于
      Create a new /sys entry '/sys/firmware/fdt' to export the FDT blob
      that was passed to the kernel by the bootloader. This allows userland
      applications such as kexec to access the raw binary.
      
      The fact that this node does not reside under /sys/firmware/device-tree
      is deliberate: FDT is also used on arm64 UEFI/ACPI systems to
      communicate just the UEFI and ACPI entry points, but the FDT is never
      unflattened and used to configure the system.
      
      A CRC32 checksum is calculated over the entire FDT blob, and verified
      at late_initcall time. The sysfs entry is instantiated only if the
      checksum is valid, i.e., if the FDT blob has not been modified in the
      mean time. Otherwise, a warning is printed.
      Signed-off-by: NArd Biesheuvel <ard.biesheuvel@linaro.org>
      Signed-off-by: NGrant Likely <grant.likely@linaro.org>
      08d53aa5
    • K
      of: Fix crash if an earlycon driver is not found · ab74d00a
      Kevin Cernekee 提交于
      __earlycon_of_table_sentinel.compatible is a char[128], not a pointer, so
      it will never be NULL.  Checking it against NULL causes the match loop to
      run past the end of the array, and eventually match a bogus entry, under
      the following conditions:
      
       - Kernel command line specifies "earlycon" with no parameters
       - DT has a stdout-path pointing to a UART node
       - The UART driver doesn't use OF_EARLYCON_DECLARE (or maybe the console
         driver is compiled out)
      
      Fix this by checking to see if match->compatible is a non-empty string.
      Signed-off-by: NKevin Cernekee <cernekee@gmail.com>
      Cc: <stable@vger.kernel.org> # 3.16+
      Signed-off-by: NRob Herring <robh@kernel.org>
      ab74d00a
  25. 05 11月, 2014 1 次提交