Fix crash with poorly defined #size-cells
If you have a parent block with #size-cells improperly set to 0, and then subsequently try to include a regs property in the child, dtc will crash with SIGFPE while validating it. This patch fixes that crash, instead printing the same invalid length warning that was causing it. Test included. Signed-off-by: Jack Miller <jack@codezen.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>main
parent
9d3649bd3b
commit
64c46b098b
2
checks.c
2
checks.c
|
@ -560,7 +560,7 @@ static void check_reg_format(struct check *c, struct node *dt,
|
|||
size_cells = node_size_cells(node->parent);
|
||||
entrylen = (addr_cells + size_cells) * sizeof(cell_t);
|
||||
|
||||
if ((prop->val.len % entrylen) != 0)
|
||||
if (!entrylen || (prop->val.len % entrylen) != 0)
|
||||
FAIL(c, "\"reg\" property in %s has invalid length (%d bytes) "
|
||||
"(#address-cells == %d, #size-cells == %d)",
|
||||
node->fullpath, prop->val.len, addr_cells, size_cells);
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
mangled {
|
||||
#address-cells = <0x0>;
|
||||
#size-cells = <0x0>;
|
||||
|
||||
valid {
|
||||
reg = <0x0 0x4000000>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -279,6 +279,8 @@ libfdt_tests () {
|
|||
run_dtc_test -I dts -O dtb -o embedded_nul.test.dtb embedded_nul.dts
|
||||
run_dtc_test -I dts -O dtb -o embedded_nul_equiv.test.dtb embedded_nul_equiv.dts
|
||||
run_test dtbs_equal_ordered embedded_nul.test.dtb embedded_nul_equiv.test.dtb
|
||||
|
||||
run_dtc_test -I dts -O dtb bad-size-cells.dts
|
||||
}
|
||||
|
||||
dtc_tests () {
|
||||
|
|
Loading…
Reference in New Issue