scripts/dtc: Update to upstream version 53bf130b1cdd
authorRob Herring <robh@kernel.org>
Fri, 4 Mar 2016 14:56:58 +0000 (08:56 -0600)
committerRob Herring <robh@kernel.org>
Tue, 29 Mar 2016 18:29:22 +0000 (13:29 -0500)
Sync to upstream dtc commit 53bf130b1cdd ("libfdt: simplify
fdt_node_check_compatible()"). This adds the following commits from
upstream:

53bf130 libfdt: simplify fdt_node_check_compatible()
c9d9121 Warn on node name unit-address presence/absence mismatch
2e53f9d Catch unsigned 32bit overflow when parsing flattened device tree offsets

Signed-off-by: Rob Herring <robh@kernel.org>
scripts/dtc/checks.c
scripts/dtc/flattree.c
scripts/dtc/libfdt/fdt_ro.c
scripts/dtc/version_gen.h

index 0c03ac9159c10a1e5eef0eca7136d246353aed16..386f9563313f713f896236814de35811d145d121 100644 (file)
@@ -294,6 +294,30 @@ static void check_node_name_format(struct check *c, struct node *dt,
 }
 NODE_ERROR(node_name_format, NULL, &node_name_chars);
 
+static void check_unit_address_vs_reg(struct check *c, struct node *dt,
+                            struct node *node)
+{
+       const char *unitname = get_unitname(node);
+       struct property *prop = get_property(node, "reg");
+
+       if (!prop) {
+               prop = get_property(node, "ranges");
+               if (prop && !prop->val.len)
+                       prop = NULL;
+       }
+
+       if (prop) {
+               if (!unitname[0])
+                       FAIL(c, "Node %s has a reg or ranges property, but no unit name",
+                           node->fullpath);
+       } else {
+               if (unitname[0])
+                       FAIL(c, "Node %s has a unit name, but no reg property",
+                           node->fullpath);
+       }
+}
+NODE_WARNING(unit_address_vs_reg, NULL);
+
 static void check_property_name_chars(struct check *c, struct node *dt,
                                      struct node *node, struct property *prop)
 {
@@ -667,6 +691,8 @@ static struct check *check_table[] = {
 
        &addr_size_cells, &reg_format, &ranges_format,
 
+       &unit_address_vs_reg,
+
        &avoid_default_addr_size,
        &obsolete_chosen_interrupt_controller,
 
index bd99fa2d33b85e873bd00178d6390d70f4afaa0d..ec14954f5810de3ad7262d5ee60e21b23565c155 100644 (file)
@@ -889,7 +889,7 @@ struct boot_info *dt_from_blob(const char *fname)
 
        if (version >= 3) {
                uint32_t size_str = fdt32_to_cpu(fdt->size_dt_strings);
-               if (off_str+size_str > totalsize)
+               if ((off_str+size_str < off_str) || (off_str+size_str > totalsize))
                        die("String table extends past total size\n");
                inbuf_init(&strbuf, blob + off_str, blob + off_str + size_str);
        } else {
@@ -898,7 +898,7 @@ struct boot_info *dt_from_blob(const char *fname)
 
        if (version >= 17) {
                size_dt = fdt32_to_cpu(fdt->size_dt_struct);
-               if (off_dt+size_dt > totalsize)
+               if ((off_dt+size_dt < off_dt) || (off_dt+size_dt > totalsize))
                        die("Structure block extends past total size\n");
        }
 
index e5b313682007265ed67036b64c39890c14c830f8..50cce864283c4dd2818c3d5f2666b7b23f54086a 100644 (file)
@@ -647,10 +647,8 @@ int fdt_node_check_compatible(const void *fdt, int nodeoffset,
        prop = fdt_getprop(fdt, nodeoffset, "compatible", &len);
        if (!prop)
                return len;
-       if (fdt_stringlist_contains(prop, len, compatible))
-               return 0;
-       else
-               return 1;
+
+       return !fdt_stringlist_contains(prop, len, compatible);
 }
 
 int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
index 11d93e6d8220c45d737175d22af4ab0ccaf871a1..ad9b05ae698b0495ecbda42ffcf4743555313a27 100644 (file)
@@ -1 +1 @@
-#define DTC_VERSION "DTC 1.4.1-gb06e55c8"
+#define DTC_VERSION "DTC 1.4.1-g53bf130b"