diff options
Diffstat (limited to 'tools/fit_image.c')
| -rw-r--r-- | tools/fit_image.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/tools/fit_image.c b/tools/fit_image.c index 10849733816..0306333141e 100644 --- a/tools/fit_image.c +++ b/tools/fit_image.c @@ -658,13 +658,25 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname) } if (params->external_offset > 0) { /* An external offset positions the data absolutely. */ - fdt_setprop_u32(fdt, node, FIT_DATA_POSITION_PROP, - params->external_offset + buf_ptr); + ret = fdt_setprop_u32(fdt, node, FIT_DATA_POSITION_PROP, + params->external_offset + buf_ptr); } else { - fdt_setprop_u32(fdt, node, FIT_DATA_OFFSET_PROP, - buf_ptr); + ret = fdt_setprop_u32(fdt, node, FIT_DATA_OFFSET_PROP, + buf_ptr); } - fdt_setprop_u32(fdt, node, FIT_DATA_SIZE_PROP, len); + + if (ret) { + ret = -EINVAL; + goto err_munmap; + } + + ret = fdt_setprop_u32(fdt, node, FIT_DATA_SIZE_PROP, len); + + if (ret) { + ret = -EINVAL; + goto err_munmap; + } + buf_ptr += ALIGN(len, align_size); } @@ -793,14 +805,28 @@ static int fit_import_data(struct image_tool_params *params, const char *fname) debug("Importing data size %x\n", len); ret = fdt_setprop(fdt, node, FIT_DATA_PROP, data, len); - ret = fdt_delprop(fdt, node, ext_data_prop); - if (ret) { debug("%s: Failed to write property: %s\n", __func__, fdt_strerror(ret)); ret = -EINVAL; goto err_munmap; } + + ret = fdt_delprop(fdt, node, ext_data_prop); + if (ret) { + debug("%s: Failed to erase property: %s\n", __func__, + fdt_strerror(ret)); + ret = -EINVAL; + goto err_munmap; + } + + ret = fdt_delprop(fdt, node, FIT_DATA_SIZE_PROP); + if (ret) { + debug("%s: Failed to erase %s property: %s\n", __func__, + FIT_DATA_SIZE_PROP, fdt_strerror(ret)); + ret = -EINVAL; + goto err_munmap; + } } confs = fdt_path_offset(fdt, FIT_CONFS_PATH); |
