[PATCH v1 5/5] test: Add test case for FIT image load address overlap detection

Yannic Moog Y.Moog at phytec.de
Thu Jul 31 13:48:28 CEST 2025


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.

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