[PATCH v3 19/49] binman: Allow zero-length entries to overlap

Simon Glass sjg at chromium.org
Fri Jul 10 02:39:42 CEST 2020


Some binary blobs unfortunately obtain their position in the image from
other binary blobs, such as Intel's 'descriptor'. In this case we cannot
rely on packing to work. It is not possible to produce a valid image in
any case, due to the missing blobs.

Allow zero-length overlaps so that this does not cause any problems.

Signed-off-by: Simon Glass <sjg at chromium.org>
Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
---

(no changes since v1)

 tools/binman/etype/section.py               |  2 +-
 tools/binman/ftest.py                       |  4 ++++
 tools/binman/test/160_pack_overlap_zero.dts | 18 ++++++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100644 tools/binman/test/160_pack_overlap_zero.dts

diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 7cd12c0204..73c5553c81 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -226,7 +226,7 @@ class Entry_section(Entry):
                             "at %#x (%d)" %
                             (entry.offset, entry.offset, self._skip_at_start,
                              self._skip_at_start))
-            if entry.offset < offset:
+            if entry.offset < offset and entry.size:
                 entry.Raise("Offset %#x (%d) overlaps with previous entry '%s' "
                             "ending at %#x (%d)" %
                             (entry.offset, entry.offset, prev_name, offset, offset))
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 146d4c51d3..614ac4ed39 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -3421,6 +3421,10 @@ class TestFunctional(unittest.TestCase):
         err = stderr.getvalue()
         self.assertRegex(err, "Image 'main-section'.*missing.*: intel-ifwi")
 
+    def testPackOverlap(self):
+        """Test that zero-size overlapping regions are ignored"""
+        self._DoTestFile('160_pack_overlap_zero.dts')
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tools/binman/test/160_pack_overlap_zero.dts b/tools/binman/test/160_pack_overlap_zero.dts
new file mode 100644
index 0000000000..731aa1cbe6
--- /dev/null
+++ b/tools/binman/test/160_pack_overlap_zero.dts
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	binman {
+		u-boot {
+		};
+
+		fill {
+			size = <0>;
+			offset = <3>;
+		};
+	};
+};
-- 
2.27.0.389.gc38d7665816-goog



More information about the U-Boot mailing list