mbox series

[v7,0/5] of: change overlay apply input data from unflattened

Message ID 1520122673-11003-1-git-send-email-frowand.list@gmail.com
Headers show
Series of: change overlay apply input data from unflattened | expand

Message

Frank Rowand March 4, 2018, 12:17 a.m. UTC
From: Frank Rowand <frank.rowand@sony.com>

Move duplicating and unflattening of an overlay flattened devicetree
(FDT) into the overlay application code.  To accomplish this,
of_overlay_apply() is replaced by of_overlay_fdt_apply().

The copy of the FDT (aka "duplicate FDT") now belongs to devicetree
code, which is thus responsible for freeing the duplicate FDT.  The
caller of of_overlay_fdt_apply() remains responsible for freeing the
original FDT.

The unflattened devicetree now belongs to devicetree code, which is
thus responsible for freeing the unflattened devicetree.

These ownership changes prevent early freeing of the duplicated FDT
or the unflattened devicetree, which could result in use after free
errors.

These changes led to migrating some unittest overlay data into
their own devicetree source files, and then converting most of
them to use sugar syntax instead of hand coding fragments.

Changes from v6:
  - patches 2-5 were previously patches 1-4
  - patch 1/5 previously submitted separately as:
      "x86: devicetree: fix config option around x86_flattree_get_config()"
      https://lkml.org/lkml/2018/3/2/1148

Changes from v5:
  - Add __init to of_unittest_apply_revert_overlay_check(),
    of_unittest_overlay_5(), and of_unittest_overlay_11() to fix
    compile warnings reported by Geert

Changes from v4:
  (all in patch 1/4)
  - move of_overlay_fdt_apply() prototype from of_private.h to of.h
  - of_overlay_apply(): add kfree(fdt) if resolve phandles or
    initialize changeset fail
  - of_overlay_fdt_apply(): add parameter size of overlay_fdt and use
    it for some additional validation of the overlay fdt
  - update unittest.c with additional parameter to of_overlay_fdt_apply()

Changes from v3:
  - patch 1/4: OF_OVERLAY: add select OF_FLATTREE

Changes from v2:
  - improve error messages in patch 4/4, as suggested by Geert

Changes from v1:
  - rebase on v4.16-rc1
  - update documentation
  - split out error message to a separate patch


Frank Rowand (5):
  x86: devicetree: fix config option around x86_flattree_get_config()
  of: change overlay apply input data from unflattened to FDT
  of: Documentation: of_overlay_apply() replaced by
    of_overlay_fdt_apply()
  of: convert unittest overlay devicetree source to sugar syntax
  of: improve reporting invalid overlay target path

 Documentation/devicetree/overlay-notes.txt       |   4 +-
 arch/x86/kernel/devicetree.c                     |   2 +-
 drivers/of/Kconfig                               |   1 +
 drivers/of/overlay.c                             | 134 ++++++++--
 drivers/of/resolver.c                            |   6 -
 drivers/of/unittest-data/Makefile                |  28 ++-
 drivers/of/unittest-data/overlay.dts             | 101 ++++----
 drivers/of/unittest-data/overlay_0.dts           |  14 ++
 drivers/of/unittest-data/overlay_1.dts           |  14 ++
 drivers/of/unittest-data/overlay_10.dts          |  27 ++
 drivers/of/unittest-data/overlay_11.dts          |  28 +++
 drivers/of/unittest-data/overlay_12.dts          |  14 ++
 drivers/of/unittest-data/overlay_13.dts          |  14 ++
 drivers/of/unittest-data/overlay_15.dts          |  30 +++
 drivers/of/unittest-data/overlay_2.dts           |   9 +
 drivers/of/unittest-data/overlay_3.dts           |   9 +
 drivers/of/unittest-data/overlay_4.dts           |  18 ++
 drivers/of/unittest-data/overlay_5.dts           |   9 +
 drivers/of/unittest-data/overlay_6.dts           |  10 +
 drivers/of/unittest-data/overlay_7.dts           |  10 +
 drivers/of/unittest-data/overlay_8.dts           |  10 +
 drivers/of/unittest-data/overlay_9.dts           |  10 +
 drivers/of/unittest-data/overlay_bad_phandle.dts |  23 +-
 drivers/of/unittest-data/overlay_bad_symbol.dts  |  25 +-
 drivers/of/unittest-data/tests-overlay.dtsi      | 217 +---------------
 drivers/of/unittest.c                            | 300 +++++++++++------------
 include/linux/of.h                               |   6 +-
 27 files changed, 586 insertions(+), 487 deletions(-)
 create mode 100644 drivers/of/unittest-data/overlay_0.dts
 create mode 100644 drivers/of/unittest-data/overlay_1.dts
 create mode 100644 drivers/of/unittest-data/overlay_10.dts
 create mode 100644 drivers/of/unittest-data/overlay_11.dts
 create mode 100644 drivers/of/unittest-data/overlay_12.dts
 create mode 100644 drivers/of/unittest-data/overlay_13.dts
 create mode 100644 drivers/of/unittest-data/overlay_15.dts
 create mode 100644 drivers/of/unittest-data/overlay_2.dts
 create mode 100644 drivers/of/unittest-data/overlay_3.dts
 create mode 100644 drivers/of/unittest-data/overlay_4.dts
 create mode 100644 drivers/of/unittest-data/overlay_5.dts
 create mode 100644 drivers/of/unittest-data/overlay_6.dts
 create mode 100644 drivers/of/unittest-data/overlay_7.dts
 create mode 100644 drivers/of/unittest-data/overlay_8.dts
 create mode 100644 drivers/of/unittest-data/overlay_9.dts

Comments

Frank Rowand March 4, 2018, 12:27 a.m. UTC | #1
On 03/03/18 16:17, frowand.list@gmail.com wrote:
> From: Frank Rowand <frank.rowand@sony.com>
> 
> x86_flattree_get_config() is incorrectly protected by
> ifdef CONFIG_OF_FLATTREE.  It uses of_get_flat_dt_size(), which
> only exists if CONFIG_OF_EARLY_FLATTREE.  This issue has not
> been exposed previously because OF_FLATTREE did not occur unless
> it was selected by OF_EARLY_FLATTREE.  A devicetree overlay change
> is selecting OF_FLATTREE directly instead of indirectly enabling
> it by selecting OF_EARLY_FLATTREE.
> 
> This problem was exposed by a randconfig generated by the kbuild
> test robot, where Platform OLPC was enabled.  OLPC selects
> OF_PROMTREE instead of OF_EARLY_FLATREE.  The only other x86
> platform that selects OF is X86_INTEL_CE, which does select
> OF_EARLY_FLATTREE.
> 
> Signed-off-by: Frank Rowand <frank.rowand@sony.com>
> ---
> 
> x86 Maintainers, please ack this patch for Rob to accept
> 
> This patch previously submitted separately as:
> 
>   "x86: devicetree: fix config option around x86_flattree_get_config()"
>   https://lkml.org/lkml/2018/3/2/1148
> 
> so this is a jump from version 1 to version 6.

                                      ^^^^^^^^^
                                      version 7

> 
> No changes from version 1.
> 
> 
>  arch/x86/kernel/devicetree.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kernel/devicetree.c b/arch/x86/kernel/devicetree.c
> index 25de5f6ca997..45416826f6ee 100644
> --- a/arch/x86/kernel/devicetree.c
> +++ b/arch/x86/kernel/devicetree.c
> @@ -259,7 +259,7 @@ static void __init dtb_apic_setup(void)
>  	dtb_ioapic_setup();
>  }
>  
> -#ifdef CONFIG_OF_FLATTREE
> +#ifdef CONFIG_OF_EARLY_FLATTREE
>  static void __init x86_flattree_get_config(void)
>  {
>  	u32 size, map_len;
> 

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Thomas Gleixner March 4, 2018, 7:20 a.m. UTC | #2
On Sat, 3 Mar 2018, Frank Rowand wrote:

> On 03/03/18 16:17, frowand.list@gmail.com wrote:
> > From: Frank Rowand <frank.rowand@sony.com>
> > 
> > x86_flattree_get_config() is incorrectly protected by
> > ifdef CONFIG_OF_FLATTREE.  It uses of_get_flat_dt_size(), which
> > only exists if CONFIG_OF_EARLY_FLATTREE.  This issue has not
> > been exposed previously because OF_FLATTREE did not occur unless
> > it was selected by OF_EARLY_FLATTREE.  A devicetree overlay change
> > is selecting OF_FLATTREE directly instead of indirectly enabling
> > it by selecting OF_EARLY_FLATTREE.
> > 
> > This problem was exposed by a randconfig generated by the kbuild
> > test robot, where Platform OLPC was enabled.  OLPC selects
> > OF_PROMTREE instead of OF_EARLY_FLATREE.  The only other x86
> > platform that selects OF is X86_INTEL_CE, which does select
> > OF_EARLY_FLATTREE.
> > 
> > Signed-off-by: Frank Rowand <frank.rowand@sony.com>
> > ---
> > 
> > x86 Maintainers, please ack this patch for Rob to accept

Acked-by: Thomas Gleixner <tglx@linutronix.de>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html