wolfBoot/tools/fdt-parser
David Garske 95227f823c fdt: rewrite device tree parser with capacity bound and full validation 2026-09-02 10:48:52 +02:00
..
Makefile fdt: rewrite device tree parser with capacity bound and full validation 2026-09-02 10:48:52 +02:00
README.md fdt: rewrite device tree parser with capacity bound and full validation 2026-09-02 10:48:52 +02:00
fdt-parser.c fdt: rewrite device tree parser with capacity bound and full validation 2026-09-02 10:48:52 +02:00
nxp_t1024.dtb Fixes for NXP T1024 and booting Integrity OS: 2024-01-17 14:16:15 +01:00

README.md

Flattened Device Tree (FDT) Parser

This tool uses our internal FDT (fdt.c) parsing code to dump the device tree.

Use -i to parse a Flattened uImage Tree (FIT) image.

There is also a -t option that tests making several updates to the device tree (useful with the nxp_t1024.dtb).

Use -f to check the parser's handling of malformed input: it derives a corpus of deliberately-invalid blobs (the generator lives in src/fdt.c under WOLFBOOT_FDT_CORPUS) from the supplied file (bad magic, truncated buffers, wrapped offsets, unbalanced nesting, oversized property lengths, unterminated names, and so on) and reports whether each is rejected. Every case must be rejected; the tool exits non-zero if any is accepted or faults. Build it with -fsanitize=address,undefined to catch reads past a blob's real end:

gcc -o /tmp/fdt-parser-asan -Wall -g -O1 -fsanitize=address,undefined \
    -I include -DWOLFBOOT_FDT -DWOLFBOOT_FDT_CORPUS -DPRINTF_ENABLED \
    tools/fdt-parser/fdt-parser.c src/fdt.c
/tmp/fdt-parser-asan ./tools/fdt-parser/nxp_t1024.dtb -f

Building fdt-parser

From root: make fdt-parser OR From tools/fdt-parser use make clean && make

Example FDT Output

% ./tools/fdt-parser/fdt-parser ./tools/fdt-parser/nxp_t1024.dtb
FDT Parser (./tools/fdt-parser/nxp_t1024.dtb):
FDT Version 17, Size 31102
root (node offset 0, depth 1, len 0):
	compatible (prop offset 8, len 13): fsl,T1024RDB
	#address-cells (prop offset 36, len 4): ....| 00 00 00 02
	#size-cells (prop offset 52, len 4): ....| 00 00 00 02
	interrupt-parent (prop offset 68, len 4): ....| 00 00 00 01
	model (prop offset 84, len 13): fsl,T1024RDB
	cpus (node offset 112, depth 2, len 4):
		power-isa-version (prop offset 124, len 5): 2.06
		power-isa-b (prop offset 144, len 0): NULL
		power-isa-e (prop offset 156, len 0): NULL
		power-isa-atb (prop offset 168, len 0): NULL
		power-isa-cs (prop offset 180, len 0): NULL
...

Example FIT Output

% ./tools/fdt-parser/fdt-parser -i ./tools/fdt-parser/lynx-test-arm.srp
FDT Parser (./tools/fdt-parser/lynx-test-arm.srp):
FDT Version 17, Size 164232633
FIT: Found 'conf@1' configuration
        description (len 46): LynxSecure 2024.06.0-96ce6f31a0 SRP (aarch64)
Kernel Image: kernel@1
        description (len 46): LynxSecure 2024.06.0-96ce6f31a0 SRP (aarch64)
        type (len 7): kernel
        os (len 6): linux
        arch (len 6): arm64
        compression (len 5): none
        load (len 4):
        entry (len 4):
        data (len 164186944): not rendering
FDT Image: fdt@1
        description (len 77): Flattened Device Tree blob for LynxSecure 2024.06.0-96ce6f31a0 SRP (aarch64)
        type (len 8): flat_dt
        arch (len 6): arm64
        compression (len 5): none
        padding (len 8):
        data (len 44770): not rendering
Return 0