diff options
author | Rob Herring <robh@kernel.org> | 2016-03-04 09:56:58 -0500 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2016-03-29 14:29:22 -0400 |
commit | b993734718c0106418e068f21c7be01afc12306c (patch) | |
tree | 8b098809bcc9edb85d0e76c52c1abebd8100440f | |
parent | f55532a0c0b8bb6148f4e07853b876ef73bc69ca (diff) |
scripts/dtc: Update to upstream version 53bf130b1cdd
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>
-rw-r--r-- | scripts/dtc/checks.c | 26 | ||||
-rw-r--r-- | scripts/dtc/flattree.c | 4 | ||||
-rw-r--r-- | scripts/dtc/libfdt/fdt_ro.c | 6 | ||||
-rw-r--r-- | scripts/dtc/version_gen.h | 2 |
4 files changed, 31 insertions, 7 deletions
diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c index 0c03ac9159c1..386f9563313f 100644 --- a/scripts/dtc/checks.c +++ b/scripts/dtc/checks.c | |||
@@ -294,6 +294,30 @@ static void check_node_name_format(struct check *c, struct node *dt, | |||
294 | } | 294 | } |
295 | NODE_ERROR(node_name_format, NULL, &node_name_chars); | 295 | NODE_ERROR(node_name_format, NULL, &node_name_chars); |
296 | 296 | ||
297 | static void check_unit_address_vs_reg(struct check *c, struct node *dt, | ||
298 | struct node *node) | ||
299 | { | ||
300 | const char *unitname = get_unitname(node); | ||
301 | struct property *prop = get_property(node, "reg"); | ||
302 | |||
303 | if (!prop) { | ||
304 | prop = get_property(node, "ranges"); | ||
305 | if (prop && !prop->val.len) | ||
306 | prop = NULL; | ||
307 | } | ||
308 | |||
309 | if (prop) { | ||
310 | if (!unitname[0]) | ||
311 | FAIL(c, "Node %s has a reg or ranges property, but no unit name", | ||
312 | node->fullpath); | ||
313 | } else { | ||
314 | if (unitname[0]) | ||
315 | FAIL(c, "Node %s has a unit name, but no reg property", | ||
316 | node->fullpath); | ||
317 | } | ||
318 | } | ||
319 | NODE_WARNING(unit_address_vs_reg, NULL); | ||
320 | |||
297 | static void check_property_name_chars(struct check *c, struct node *dt, | 321 | static void check_property_name_chars(struct check *c, struct node *dt, |
298 | struct node *node, struct property *prop) | 322 | struct node *node, struct property *prop) |
299 | { | 323 | { |
@@ -667,6 +691,8 @@ static struct check *check_table[] = { | |||
667 | 691 | ||
668 | &addr_size_cells, ®_format, &ranges_format, | 692 | &addr_size_cells, ®_format, &ranges_format, |
669 | 693 | ||
694 | &unit_address_vs_reg, | ||
695 | |||
670 | &avoid_default_addr_size, | 696 | &avoid_default_addr_size, |
671 | &obsolete_chosen_interrupt_controller, | 697 | &obsolete_chosen_interrupt_controller, |
672 | 698 | ||
diff --git a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c index bd99fa2d33b8..ec14954f5810 100644 --- a/scripts/dtc/flattree.c +++ b/scripts/dtc/flattree.c | |||
@@ -889,7 +889,7 @@ struct boot_info *dt_from_blob(const char *fname) | |||
889 | 889 | ||
890 | if (version >= 3) { | 890 | if (version >= 3) { |
891 | uint32_t size_str = fdt32_to_cpu(fdt->size_dt_strings); | 891 | uint32_t size_str = fdt32_to_cpu(fdt->size_dt_strings); |
892 | if (off_str+size_str > totalsize) | 892 | if ((off_str+size_str < off_str) || (off_str+size_str > totalsize)) |
893 | die("String table extends past total size\n"); | 893 | die("String table extends past total size\n"); |
894 | inbuf_init(&strbuf, blob + off_str, blob + off_str + size_str); | 894 | inbuf_init(&strbuf, blob + off_str, blob + off_str + size_str); |
895 | } else { | 895 | } else { |
@@ -898,7 +898,7 @@ struct boot_info *dt_from_blob(const char *fname) | |||
898 | 898 | ||
899 | if (version >= 17) { | 899 | if (version >= 17) { |
900 | size_dt = fdt32_to_cpu(fdt->size_dt_struct); | 900 | size_dt = fdt32_to_cpu(fdt->size_dt_struct); |
901 | if (off_dt+size_dt > totalsize) | 901 | if ((off_dt+size_dt < off_dt) || (off_dt+size_dt > totalsize)) |
902 | die("Structure block extends past total size\n"); | 902 | die("Structure block extends past total size\n"); |
903 | } | 903 | } |
904 | 904 | ||
diff --git a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/fdt_ro.c index e5b313682007..50cce864283c 100644 --- a/scripts/dtc/libfdt/fdt_ro.c +++ b/scripts/dtc/libfdt/fdt_ro.c | |||
@@ -647,10 +647,8 @@ int fdt_node_check_compatible(const void *fdt, int nodeoffset, | |||
647 | prop = fdt_getprop(fdt, nodeoffset, "compatible", &len); | 647 | prop = fdt_getprop(fdt, nodeoffset, "compatible", &len); |
648 | if (!prop) | 648 | if (!prop) |
649 | return len; | 649 | return len; |
650 | if (fdt_stringlist_contains(prop, len, compatible)) | 650 | |
651 | return 0; | 651 | return !fdt_stringlist_contains(prop, len, compatible); |
652 | else | ||
653 | return 1; | ||
654 | } | 652 | } |
655 | 653 | ||
656 | int fdt_node_offset_by_compatible(const void *fdt, int startoffset, | 654 | int fdt_node_offset_by_compatible(const void *fdt, int startoffset, |
diff --git a/scripts/dtc/version_gen.h b/scripts/dtc/version_gen.h index 11d93e6d8220..ad9b05ae698b 100644 --- a/scripts/dtc/version_gen.h +++ b/scripts/dtc/version_gen.h | |||
@@ -1 +1 @@ | |||
#define DTC_VERSION "DTC 1.4.1-gb06e55c8" | #define DTC_VERSION "DTC 1.4.1-g53bf130b" | ||