diff options
author | Simon Glass <sjg@chromium.org> | 2020-03-02 12:02:54 -0700 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2020-03-03 09:59:55 +1100 |
commit | e5cc26b68bc094c9260caaf330e03bb71129082e (patch) | |
tree | ffe71b74a8e55e218f2599b20a3e22a3da477967 /libfdt | |
parent | 28fd7590aad2ab4c0aae6b6674b15f103c492d64 (diff) | |
download | dtc-e5cc26b68bc094c9260caaf330e03bb71129082e.zip dtc-e5cc26b68bc094c9260caaf330e03bb71129082e.tar.gz dtc-e5cc26b68bc094c9260caaf330e03bb71129082e.tar.bz2 |
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>
Diffstat (limited to 'libfdt')
-rw-r--r-- | libfdt/fdt_ro.c | 4 | ||||
-rw-r--r-- | libfdt/libfdt_internal.h | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c index 1945503..e03570a 100644 --- a/libfdt/fdt_ro.c +++ b/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; 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; break; } @@ -634,7 +634,7 @@ int fdt_node_depth(const void *fdt, int nodeoffset) err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth); if (err) - return (can_assume(VALID_INPUT) || err < 0) ? err : + return (can_assume(LIBFDT_FLAWLESS) || err < 0) ? err : -FDT_ERR_INTERNAL; return nodedepth; } diff --git a/libfdt/libfdt_internal.h b/libfdt/libfdt_internal.h index 7999f6a..d4e0bd4 100644 --- a/libfdt/libfdt_internal.h +++ b/libfdt/libfdt_internal.h @@ -145,6 +145,15 @@ enum { * device tree is correctly ordered. See fdt_blocks_misordered_(). */ 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, }; /** |