[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