diff options
author | Lihua Zhao <lihua.zhao@windriver.com> | 2020-04-18 01:59:10 -0700 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-04-24 10:51:56 -0400 |
commit | 3fc85a782a3d46fcb32bfb93829d2424d696c4d3 (patch) | |
tree | ee7edd630917ca017fd28223fe4013bfded6d228 /tools | |
parent | 3b32cf096bd6b1d8871ecaddb4250756242fb5f9 (diff) | |
download | u-boot-3fc85a782a3d46fcb32bfb93829d2424d696c4d3.zip u-boot-3fc85a782a3d46fcb32bfb93829d2424d696c4d3.tar.gz u-boot-3fc85a782a3d46fcb32bfb93829d2424d696c4d3.tar.bz2 |
mkimage: fit: Unmmap the memory before closing fd in fit_import_data()
Without calling munmap(), the follow-up call to open() the same file
with a flag O_TRUNC seems not to cause any issue on Linux, but it fails
on Windows with error like below:
Can't open kernel_fdt.itb.tmp: Permission denied
Fix this by unmapping the memory before closing fd in fit_import_data().
Signed-off-by: Lihua Zhao <lihua.zhao@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/fit_image.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/tools/fit_image.c b/tools/fit_image.c index f32ee49..c37cae3 100644 --- a/tools/fit_image.c +++ b/tools/fit_image.c @@ -563,21 +563,21 @@ static int fit_import_data(struct image_tool_params *params, const char *fname) fprintf(stderr, "%s: Failed to allocate memory (%d bytes)\n", __func__, size); ret = -ENOMEM; - goto err_has_fd; + goto err_munmap; } ret = fdt_open_into(old_fdt, fdt, size); if (ret) { debug("%s: Failed to expand FIT: %s\n", __func__, fdt_strerror(errno)); ret = -EINVAL; - goto err_has_fd; + goto err_munmap; } images = fdt_path_offset(fdt, FIT_IMAGES_PATH); if (images < 0) { debug("%s: Cannot find /images node: %d\n", __func__, images); ret = -EINVAL; - goto err_has_fd; + goto err_munmap; } for (node = fdt_first_subnode(fdt, images); @@ -598,10 +598,12 @@ static int fit_import_data(struct image_tool_params *params, const char *fname) debug("%s: Failed to write property: %s\n", __func__, fdt_strerror(ret)); ret = -EINVAL; - goto err_has_fd; + goto err_munmap; } } + munmap(old_fdt, sbuf.st_size); + /* Close the old fd so we can re-use it. */ close(fd); @@ -616,22 +618,24 @@ static int fit_import_data(struct image_tool_params *params, const char *fname) fprintf(stderr, "%s: Can't open %s: %s\n", params->cmdname, fname, strerror(errno)); ret = -EIO; - goto err_no_fd; + goto err; } if (write(fd, fdt, new_size) != new_size) { debug("%s: Failed to write external data to file %s\n", __func__, strerror(errno)); ret = -EIO; - goto err_has_fd; + goto err; } - ret = 0; - -err_has_fd: + free(fdt); close(fd); -err_no_fd: + return 0; + +err_munmap: munmap(old_fdt, sbuf.st_size); +err: free(fdt); + close(fd); return ret; } |