Browse Source

libfdt: Add support for disabling internal checks

If libfdt returns -FDT_ERR_INTERNAL that generally indicates a bug in the
library. Add a new assumption for these cases since it should be save to
disable these checks regardless of the input.

Signed-off-by: Simon Glass <sjg@chromium.org>
Suggested-by: David Gibson <david@gibson.dropbear.id.au>
Message-Id: <20200302190255.51426-3-sjg@chromium.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
main
Simon Glass 5 years ago committed by David Gibson
parent
commit
e5cc26b68b
  1. 4
      libfdt/fdt_ro.c
  2. 9
      libfdt/libfdt_internal.h

4
libfdt/fdt_ro.c

@ -402,7 +402,7 @@ static const struct fdt_property *fdt_get_property_namelen_(const void *fdt,
const struct fdt_property *prop; const struct fdt_property *prop;


prop = fdt_get_property_by_offset_(fdt, offset, lenp); prop = fdt_get_property_by_offset_(fdt, offset, lenp);
if (!can_assume(VALID_DTB) && !prop) { if (!can_assume(LIBFDT_FLAWLESS) && !prop) {
offset = -FDT_ERR_INTERNAL; offset = -FDT_ERR_INTERNAL;
break; break;
} }
@ -634,7 +634,7 @@ int fdt_node_depth(const void *fdt, int nodeoffset)


err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth); err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth);
if (err) if (err)
return (can_assume(VALID_INPUT) || err < 0) ? err : return (can_assume(LIBFDT_FLAWLESS) || err < 0) ? err :
-FDT_ERR_INTERNAL; -FDT_ERR_INTERNAL;
return nodedepth; return nodedepth;
} }

9
libfdt/libfdt_internal.h

@ -145,6 +145,15 @@ enum {
* device tree is correctly ordered. See fdt_blocks_misordered_(). * device tree is correctly ordered. See fdt_blocks_misordered_().
*/ */
ASSUME_LIBFDT_ORDER = 1 << 4, ASSUME_LIBFDT_ORDER = 1 << 4,

/*
* This assumes that libfdt itself does not have any internal bugs. It
* drops certain checks that should never be needed unless libfdt has an
* undiscovered bug.
*
* This can generally be considered safe to enable.
*/
ASSUME_LIBFDT_FLAWLESS = 1 << 5,
}; };


/** /**

Loading…
Cancel
Save