From: Simon Glass <s...@chromium.org>

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 <s...@chromium.org>
Suggested-by: David Gibson <da...@gibson.dropbear.id.au>
Message-Id: <20200302190255.51426-3-...@chromium.org>
Signed-off-by: David Gibson <da...@gibson.dropbear.id.au>
---
 cpukit/dtc/libfdt/fdt_ro.c          | 4 ++--
 cpukit/dtc/libfdt/libfdt_internal.h | 9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/cpukit/dtc/libfdt/fdt_ro.c b/cpukit/dtc/libfdt/fdt_ro.c
index 194550344a..e03570a56e 100644
--- a/cpukit/dtc/libfdt/fdt_ro.c
+++ b/cpukit/dtc/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/cpukit/dtc/libfdt/libfdt_internal.h 
b/cpukit/dtc/libfdt/libfdt_internal.h
index 7999f6a2d4..d4e0bd49c0 100644
--- a/cpukit/dtc/libfdt/libfdt_internal.h
+++ b/cpukit/dtc/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,
 };
 
 /**
-- 
2.31.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to