[PATCH v1 5/5] test: Add test case for FIT image load address overlap detection
Aristo Chen
jj251510319013 at gmail.com
Sat Aug 9 04:04:48 CEST 2025
Yannic Moog <Y.Moog at phytec.de> 於 2025年7月31日 週四 下午7:48寫道:
>
> Am Dienstag, dem 29.07.2025 um 12:48 +0000 schrieb Aristo Chen:
> > Add a new test case to verify that mkimage properly detects and reports
> > memory region overlaps in FIT image configurations.
> >
> > The test creates a FIT image with kernel and FDT components that have
> > the same load address (0x40000), which should trigger the overlap
> > detection logic and cause mkimage to fail with an appropriate error
> > message.
> >
> > Test verifies:
> > - mkimage returns non-zero exit code when overlap is detected
> > - Error message contains "Error: Overlap detected:"
> > - Error message identifies the specific overlapping components
> > (kernel at 1 and fdt at 1)
> >
> > This test ensures the overlap detection feature works correctly and
> > prevents deployment of FIT images with conflicting memory layouts
> > that could cause runtime failures.
> >
> > Signed-off-by: Aristo Chen <aristo.chen at canonical.com>
> > ---
> > test/py/tests/test_fit_mkimage_validate.py | 65 ++++++++++++++++++++++
> > 1 file changed, 65 insertions(+)
> >
> > diff --git a/test/py/tests/test_fit_mkimage_validate.py
> > b/test/py/tests/test_fit_mkimage_validate.py
> > index ef974c8c762..51f7f64b257 100644
> > --- a/test/py/tests/test_fit_mkimage_validate.py
> > +++ b/test/py/tests/test_fit_mkimage_validate.py
> > @@ -101,3 +101,68 @@ def test_fit_invalid_default_config(ubman):
> >
> > assert result.returncode != 0, "mkimage should fail due to missing
> > default config"
> > assert re.search(r"Default configuration '.*' not found under
> > /configurations", result.stderr)
> > +
> > +def test_fit_load_addr_overlap(ubman):
> > + """Test that mkimage fails when load address overlap"""
> > +
> > + its_fname = fit_util.make_fname(ubman, "invalid.its")
> > + itb_fname = fit_util.make_fname(ubman, "invalid.itb")
> > + kernel = fit_util.make_kernel(ubman, 'kernel.bin', 'kernel')
> > + fdt = fit_util.make_dtb(ubman, '''
> > +/dts-v1/;
> > +/ {
> > + model = "Test FDT";
> > + compatible = "test";
> > +};
> > +''', 'test')
> > +
> > + # Write ITS with an invalid reference to a nonexistent default config
> > + its_text = '''
> > +/dts-v1/;
> > +
> > +/ {
> > + images {
> > + kernel at 1 {
> > + description = "Test Kernel";
> > + data = /incbin/("kernel.bin");
> > + type = "kernel";
> > + arch = "sandbox";
> > + os = "linux";
> > + compression = "none";
> > + load = <0x40000>;
> > + entry = <0x40000>;
> > + };
> > + fdt at 1 {
> > + description = "Test FDT";
> > + data = /incbin/("test.dtb");
> > + type = "flat_dt";
> > + arch = "sandbox";
> > + os = "linux";
> > + compression = "none";
> > + load = <0x40000>;
> > + entry = <0x40000>;
> > + };
> > + };
> > +
> > + configurations {
> > + default = "conf at 1";
> > + conf at 1 {
> > + kernel = "kernel at 1";
> > + fdt = "fdt at 1";
> > + };
> > + };
> > +};
> > +'''
>
> Why do you create the dts here?
> I think it is best to stay consistent: create a dts file and use existing
> _DoReadFileDtb and the like for the test.
If I understand correctly, _DoReadFileDtb is defined in
tools/binman/ftest.py, and is only for binman related test.
Also I found that in test/py/tests/test_fit.py, it also defined a dts
file in itself, what is the best practice to create dts file?
>
> Yannic
>
> > +
> > + with open(its_fname, 'w') as f:
> > + f.write(its_text)
> > +
> > + mkimage = os.path.join(ubman.config.build_dir, 'tools/mkimage')
> > + cmd = [mkimage, '-f', its_fname, itb_fname]
> > +
> > + result = subprocess.run(cmd, capture_output=True, text=True)
> > +
> > + assert result.returncode != 0, "mkimage should fail due to memory
> > overlap"
> > + assert "Error: Overlap detected:" in result.stderr
> > + # Check that it identifies the specific overlapping components
> > + assert "kernel at 1" in result.stderr and "fdt at 1" in result.stderr
More information about the U-Boot
mailing list