This adds the following commits from upstream: 53373d135579 dtc: Remove unused dts_version in dtc-lexer.l caf7465c5d60 libfdt: fdt_check_full: Handle FDT_NOP when FDT_END is expected 5976c4a66098 libfdt: fdt_rw: Introduce fdt_downgrade_version() 5bb5bedd347d fdtdump: Return an error code on wrong tag value 68b960e299f7 fdtdump: Remove dtb version check adba02caf554 dtc: Use a consistent type for basenamelen 8d15a63e84ff libfdt: Verify alignment of sub-blocks in dtb
Unified · Split
| @@ -324,7 +324,7 @@ ERROR(node_name_chars, check_node_name_chars, NODECHARS); · 323 unmodified lines | |||
| 324 | static void check_node_name_chars_strict(struct check *c, struct dt_info *dti, | 324 | static void check_node_name_chars_strict(struct check *c, struct dt_info *dti, |
| 325 | struct node *node) | 325 | struct node *node) |
| 326 | { | 326 | { |
| 327 | int n = strspn(node->name, c->data); | 327 | size_t n = strspn(node->name, c->data); |
| 328 | 328 | ||
| 329 | if (n < node->basenamelen) | 329 | if (n < node->basenamelen) |
| 330 | FAIL(c, dti, node, "Character '%c' not recommended in node name", | 330 | FAIL(c, dti, node, "Character '%c' not recommended in node name", |
| @@ -39,8 +39,6 @@ extern bool treesource_error; · 38 unmodified lines | |||
| 39 | #define DPRINT(fmt, ...) do { } while (0) | 39 | #define DPRINT(fmt, ...) do { } while (0) |
| 40 | #endif | 40 | #endif |
| 41 | 41 | ||
| 42 | static int dts_version = 1; | ||
| 43 | |||
| 44 | #define BEGIN_DEFAULT() DPRINT("<V1>\n"); \ | 42 | #define BEGIN_DEFAULT() DPRINT("<V1>\n"); \ |
| 45 | BEGIN(V1); \ | 43 | BEGIN(V1); \ |
| 46 | 44 | ||
| @@ -101,7 +99,6 @@ static void PRINTF(1, 2) lexical_error(const char *fmt, ...); · 54 unmodified lines | |||
| 101 | 99 | ||
| 102 | <*>"/dts-v1/" { | 100 | <*>"/dts-v1/" { |
| 103 | DPRINT("Keyword: /dts-v1/\n"); | 101 | DPRINT("Keyword: /dts-v1/\n"); |
| 104 | dts_version = 1; | ||
| 105 | BEGIN_DEFAULT(); | 102 | BEGIN_DEFAULT(); |
| 106 | return DT_V1; | 103 | return DT_V1; |
| 107 | } | 104 | } |
| @@ -227,7 +227,7 @@ struct node { · 226 unmodified lines | |||
| 227 | struct node *next_sibling; | 227 | struct node *next_sibling; |
| 228 | 228 | ||
| 229 | char *fullpath; | 229 | char *fullpath; |
| 230 | int basenamelen; | 230 | size_t basenamelen; |
| 231 | 231 | ||
| 232 | cell_t phandle; | 232 | cell_t phandle; |
| 233 | int addr_cells, size_cells; | 233 | int addr_cells, size_cells; |
| @@ -110,6 +110,14 @@ int fdt_check_header(const void *fdt) · 109 unmodified lines | |||
| 110 | || (fdt_totalsize(fdt) > INT_MAX)) | 110 | || (fdt_totalsize(fdt) > INT_MAX)) |
| 111 | return -FDT_ERR_TRUNCATED; | 111 | return -FDT_ERR_TRUNCATED; |
| 112 | 112 | ||
| 113 | /* memrsv block must be 8 byte aligned */ | ||
| 114 | if (fdt_off_mem_rsvmap(fdt) % sizeof(uint64_t)) | ||
| 115 | return -FDT_ERR_ALIGNMENT; | ||
| 116 | |||
| 117 | /* Structure block must be 4 byte aligned */ | ||
| 118 | if (fdt_off_dt_struct(fdt) % FDT_TAGSIZE) | ||
| 119 | return -FDT_ERR_ALIGNMENT; | ||
| 120 | |||
| 113 | /* Bounds check memrsv block */ | 121 | /* Bounds check memrsv block */ |
| 114 | if (!check_off_(hdrsize, fdt_totalsize(fdt), | 122 | if (!check_off_(hdrsize, fdt_totalsize(fdt), |
| 115 | fdt_off_mem_rsvmap(fdt))) | 123 | fdt_off_mem_rsvmap(fdt))) |
| @@ -22,6 +22,12 @@ static int fdt_blocks_misordered_(const void *fdt, · 21 unmodified lines | |||
| 22 | (fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt))); | 22 | (fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt))); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | static void fdt_downgrade_version(void *fdt) | ||
| 26 | { | ||
| 27 | if (!can_assume(LATEST) && fdt_version(fdt) > FDT_LAST_SUPPORTED_VERSION) | ||
| 28 | fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION); | ||
| 29 | } | ||
| 30 | |||
| 25 | static int fdt_rw_probe_(void *fdt) | 31 | static int fdt_rw_probe_(void *fdt) |
| 26 | { | 32 | { |
| 27 | if (can_assume(VALID_DTB)) | 33 | if (can_assume(VALID_DTB)) |
| @@ -33,9 +39,8 @@ static int fdt_rw_probe_(void *fdt) · 5 unmodified lines | |||
| 33 | if (fdt_blocks_misordered_(fdt, sizeof(struct fdt_reserve_entry), | 39 | if (fdt_blocks_misordered_(fdt, sizeof(struct fdt_reserve_entry), |
| 34 | fdt_size_dt_struct(fdt))) | 40 | fdt_size_dt_struct(fdt))) |
| 35 | return -FDT_ERR_BADLAYOUT; | 41 | return -FDT_ERR_BADLAYOUT; |
| 36 | if (!can_assume(LATEST) && fdt_version(fdt) > 17) | ||
| 37 | fdt_set_version(fdt, 17); | ||
| 38 | 42 | ||
| 43 | fdt_downgrade_version(fdt); | ||
| 39 | return 0; | 44 | return 0; |
| 40 | } | 45 | } |
| 41 | 46 | ||
| @@ -1 +1 @@ | |||
| 1 | #define DTC_VERSION "DTC 1.7.2-ga26ef640" | 1 | #define DTC_VERSION "DTC 1.7.2-g53373d13" |