aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlper Nebi Yasak2022-03-27 18:31:50 +0300
committerTom Rini2022-04-25 10:11:05 -0400
commit82337bb6b63226c9a8a78dc03a1af1eab6494a6b (patch)
treec20fced1d8ddff5fae5a2843b73b79ce9bb187da
parent99283e5389cd5b8b7bb191913fa1d3d18e4bfbec (diff)
binman: Refuse to replace sections for now
Binman interfaces allow attempts to replace any entry in the image with arbitrary data. When trying to replace sections, the changes in the section entry's data are not propagated to its child entries. This, combined with how sections rebuild their contents from its children, eventually causes the replaced contents to be silently overwritten by rebuilt contents equivalent to the original data. Add a simple test for replacing a section that is currently failing due to this behaviour, and mark it as an expected failure. Also, raise an error when replacing a section instead of silently pretending it was replaced. Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--tools/binman/etype/section.py3
-rw-r--r--tools/binman/ftest.py9
-rw-r--r--tools/binman/test/234_replace_section_simple.dts23
3 files changed, 35 insertions, 0 deletions
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index ccac658c183..bd67238b919 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -788,6 +788,9 @@ class Entry_section(Entry):
data = new_data
return data
+ def WriteData(self, data, decomp=True):
+ self.Raise("Replacing sections is not implemented yet")
+
def WriteChildData(self, child):
return True
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 421754b1d0a..b5cf549703a 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -5693,6 +5693,15 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
self.assertIsNotNone(path)
self.assertEqual(expected_fdtmap, fdtmap)
+ @unittest.expectedFailure
+ def testReplaceSectionSimple(self):
+ """Test replacing a simple section with arbitrary data"""
+ new_data = b'w' * len(COMPRESS_DATA + U_BOOT_DATA)
+ data, expected_fdtmap, _ = self._RunReplaceCmd(
+ 'section', new_data,
+ dts='234_replace_section_simple.dts')
+ self.assertEqual(new_data, data)
+
if __name__ == "__main__":
unittest.main()
diff --git a/tools/binman/test/234_replace_section_simple.dts b/tools/binman/test/234_replace_section_simple.dts
new file mode 100644
index 00000000000..c9d5c328561
--- /dev/null
+++ b/tools/binman/test/234_replace_section_simple.dts
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: GPL-2.0+
+/dts-v1/;
+
+/ {
+ binman {
+ allow-repack;
+
+ u-boot-dtb {
+ };
+
+ section {
+ blob {
+ filename = "compress";
+ };
+
+ u-boot {
+ };
+ };
+
+ fdtmap {
+ };
+ };
+};