summaryrefslogtreecommitdiffstats
path: root/meta-agl-distro
diff options
context:
space:
mode:
authorChanghyeok Bae <changhyeok.bae@gmail.com>2017-12-29 04:34:42 +0000
committerChanghyeok Bae <changhyeok.bae@gmail.com>2018-01-23 22:17:51 +0900
commit91f6f2ca5e1e6b959dd5b0abff2f1b88aa276044 (patch)
treee88ade8609c5b1e6260d8e5d2f19f0d6d0e70c18 /meta-agl-distro
parenta71ccf96262f2d27f51f3fb3072ec1bd99584168 (diff)
meta-agl-bsp/classes: Remove bbclass files
1. Remove sdcard_image-rpi 2. image: Convert vmdk/vdi/qcow2 to strict CONVERSION_CMD types (From Poky rev: 9d07c736e39a9aa922630b4241eda185a19a11ea) (From OE-Core rev: 929ba563f1bc7195c4981b8e139c432b2cc388ea) Bug-AGL: SPEC-1181 Change-Id: Ic184ff75526b9a0e67bd9d5175e094e81d23081d Signed-off-by: Changhyeok Bae <changhyeok.bae@gmail.com>
Diffstat (limited to 'meta-agl-distro')
0 files changed, 0 insertions, 0 deletions
a> 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
From caba0117dc30f2357eac6d04f3510095dcbaa7f4 Mon Sep 17 00:00:00 2001
From: Paul Barker <pbarker@konsulko.com>
Date: Fri, 18 Dec 2020 23:00:07 +0000
Subject: [PATCH] fdtoverlay: Prevent overlays from modifying phandle
 properties
To: David Gibson <david@gibson.dropbear.id.au>,
    Jon Loeliger <jdl@jdl.com>,
    devicetree-compiler@vger.kernel.org
Cc: Rob Herring <robh@kernel.org>,
    Pantelis Antoniou <pantelis.antoniou@konsulko.com>,
    Scott Murray <scott.murray@konsulko.com>,
    Jan Simon Moeller <jsmoeller@linuxfoundation.org>

When applying an overlay fragment, we should take care not to overwrite
an existing phandle property of the target node as this could break
references to the target node elsewhere in the base dtb.

In addition to potentially breaking references within the resulting fdt,
if the overlay is built with symbols enabled (`-@` option to dtc) then
fdtoverlay will be unable to merge the overlay with a base dtb file.

A new test case is added to check how fdtoverlay handles this case.
Attempting to apply this test overlay without the fix in this patch
results in the following output:

    input  = tests/overlay_base_ref.test.dtb
    output = tests/overlay_overlay_ref.fdtoverlay.dtb
    overlay[0] = tests/overlay_overlay_ref.test.dtb

    Failed to apply 'tests/overlay_overlay_ref.test.dtb': FDT_ERR_NOTFOUND

In this test case the __overlay__ node in question does not explicitly
contain a phandle property in the dts file, the phandle is added during
compilation as it is referenced by another node within the overlay dts.

This failure occurs due to a sequence of events in the functions called
by fdt_overlay_apply():

1) In overlay_fixup_phandles(), the target of the overlay fragment is
   looked up and the target property is set to the phandle of the target
   node.

2) In overlay_merge(), the target node is looked up by phandle via
   overlay_get_target(). As the __overlay__ node in this test case
   itself has a phandle property, the phandle of the target node is
   modified.

3) In overlay_symbol_update(), the target node is again looked up by
   phandle via overlay_get_target(). But this time the target node
   cannot be found as its phandle property was modified.

The fix for this issue is to skip modification of the phandle property
of the target node in step (2) of the above sequence. If the target node
doesn't already contain a phandle property, we can add one without risk.

Upstream-Status: Submitted
    https://www.spinics.net/lists/devicetree-compiler/msg03537.html
Signed-off-by: Paul Barker <pbarker@konsulko.com>
---
 libfdt/fdt_overlay.c          |  2 ++
 tests/overlay_base_ref.dts    | 19 +++++++++++++++++++
 tests/overlay_overlay_ref.dts | 24 ++++++++++++++++++++++++
 tests/run_tests.sh            |  5 +++++
 4 files changed, 50 insertions(+)
 create mode 100644 tests/overlay_base_ref.dts
 create mode 100644 tests/overlay_overlay_ref.dts

diff --git a/libfdt/fdt_overlay.c b/libfdt/fdt_overlay.c
index d217e79..b3c217a 100644
--- a/libfdt/fdt_overlay.c
+++ b/libfdt/fdt_overlay.c
@@ -573,6 +573,8 @@ static int overlay_apply_node(void *fdt, int target,
 		if (prop_len < 0)
 			return prop_len;
 
+		if (!strcmp(name, "phandle") && fdt_getprop(fdt, target, name, NULL))
+			continue;
 		ret = fdt_setprop(fdt, target, name, prop, prop_len);
 		if (ret)
 			return ret;
diff --git a/tests/overlay_base_ref.dts b/tests/overlay_base_ref.dts
new file mode 100644
index 0000000..1fc02a2
--- /dev/null
+++ b/tests/overlay_base_ref.dts
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2016 NextThing Co
+ * Copyright (c) 2016 Free Electrons
+ * Copyright (c) 2016 Konsulko Inc.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+/dts-v1/;
+
+/ {
+	test: test-node {
+		test-int-property = <42>;
+	};
+
+	test-refs {
+		refs = <&test>;
+	};
+};
diff --git a/tests/overlay_overlay_ref.dts b/tests/overlay_overlay_ref.dts
new file mode 100644
index 0000000..a45c95d
--- /dev/null
+++ b/tests/overlay_overlay_ref.dts
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2016 NextThing Co
+ * Copyright (c) 2016 Free Electrons
+ * Copyright (c) 2016 Konsulko Inc.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+	fragment@0 {
+		target = <&test>;
+
+		frag0: __overlay__ {
+			test-int-property = <43>;
+		};
+	};
+
+    test-ref {
+        ref = <&frag0>;
+    };
+};
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 294585b..a65b166 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -329,6 +329,11 @@ dtc_overlay_tests () {
     run_test check_path overlay_base_with_aliases.dtb not-exists "/__symbols__"
     run_test check_path overlay_base_with_aliases.dtb not-exists "/__fixups__"
     run_test check_path overlay_base_with_aliases.dtb not-exists "/__local_fixups__"
+
+    # Test taking a reference to an overlay fragment
+    run_dtc_test -@ -I dts -O dtb -o overlay_base_ref.test.dtb "$SRCDIR/overlay_base_ref.dts"
+    run_dtc_test -@ -I dts -O dtb -o overlay_overlay_ref.test.dtb "$SRCDIR/overlay_overlay_ref.dts"
+    run_wrap_test $FDTOVERLAY -i overlay_base_ref.test.dtb overlay_overlay_ref.test.dtb -o overlay_overlay_ref.fdtoverlay.dtb
 }
 
 tree1_tests () {
-- 
2.26.2