[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