UPSTREAM: cmd/gpt.c, cmd/nvedit.c, tools/fit_image.c: Rework recent fixes for Coverity
The recent changes to these files did not completely fix the previous issues, or introduced different (minor) issues. In cmd/gpt.c we need to dereference str_disk_guid to be sure that malloc worked. In cmd/nvedit.c we need to be careful that we can also fit in that leading space when adding to the string. And in tools/fit_image.c we need to re-work the error handling slightly in fit_import_data() so that we only call munmap() once. We have two error paths here, one where we have an fd to close and one where we do not. Adjust labels to match this. Change-Id: I66fafd0ed8d1c290a7773bba5ece8d11bfc15b50 Reported-by: Coverity (CID: 167366, 167367, 167370) Signed-off-by: Tom Rini <trini@konsulko.com> Signed-off-by: Kever Yang <kever.yang@rock-chips.com> (cherry picked from commit bf52fcdef4aac242b5e6b6b9827acf6d69ce1951)
This commit is contained in:
parent
38f2a6111e
commit
017aad0449
|
|
@ -402,7 +402,7 @@ static int set_gpt_info(struct blk_desc *dev_desc,
|
||||||
if (!val) {
|
if (!val) {
|
||||||
#ifdef CONFIG_RANDOM_UUID
|
#ifdef CONFIG_RANDOM_UUID
|
||||||
*str_disk_guid = malloc(UUID_STR_LEN + 1);
|
*str_disk_guid = malloc(UUID_STR_LEN + 1);
|
||||||
if (str_disk_guid == NULL)
|
if (*str_disk_guid == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
gen_rand_uuid_str(*str_disk_guid, UUID_STR_FORMAT_STD);
|
gen_rand_uuid_str(*str_disk_guid, UUID_STR_FORMAT_STD);
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
|
|
@ -609,7 +609,7 @@ int do_env_ask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
sprintf(message, "Please enter '%s': ", argv[1]);
|
sprintf(message, "Please enter '%s': ", argv[1]);
|
||||||
} else {
|
} else {
|
||||||
/* env_ask envname message1 ... messagen [size] */
|
/* env_ask envname message1 ... messagen [size] */
|
||||||
for (i = 2, pos = 0; i < argc && pos < sizeof(message); i++) {
|
for (i = 2, pos = 0; i < argc && pos+1 < sizeof(message); i++) {
|
||||||
if (pos)
|
if (pos)
|
||||||
message[pos++] = ' ';
|
message[pos++] = ' ';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -537,21 +537,21 @@ static int fit_import_data(struct image_tool_params *params, const char *fname)
|
||||||
fprintf(stderr, "%s: Failed to allocate memory (%d bytes)\n",
|
fprintf(stderr, "%s: Failed to allocate memory (%d bytes)\n",
|
||||||
__func__, size);
|
__func__, size);
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err;
|
goto err_has_fd;
|
||||||
}
|
}
|
||||||
ret = fdt_open_into(old_fdt, fdt, size);
|
ret = fdt_open_into(old_fdt, fdt, size);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
debug("%s: Failed to expand FIT: %s\n", __func__,
|
debug("%s: Failed to expand FIT: %s\n", __func__,
|
||||||
fdt_strerror(errno));
|
fdt_strerror(errno));
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err;
|
goto err_has_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
images = fdt_path_offset(fdt, FIT_IMAGES_PATH);
|
images = fdt_path_offset(fdt, FIT_IMAGES_PATH);
|
||||||
if (images < 0) {
|
if (images < 0) {
|
||||||
debug("%s: Cannot find /images node: %d\n", __func__, images);
|
debug("%s: Cannot find /images node: %d\n", __func__, images);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err;
|
goto err_has_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (node = fdt_first_subnode(fdt, images);
|
for (node = fdt_first_subnode(fdt, images);
|
||||||
|
|
@ -572,11 +572,11 @@ static int fit_import_data(struct image_tool_params *params, const char *fname)
|
||||||
debug("%s: Failed to write property: %s\n", __func__,
|
debug("%s: Failed to write property: %s\n", __func__,
|
||||||
fdt_strerror(ret));
|
fdt_strerror(ret));
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err;
|
goto err_has_fd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
munmap(old_fdt, sbuf.st_size);
|
/* Close the old fd so we can re-use it. */
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
/* Pack the FDT and place the data after it */
|
/* Pack the FDT and place the data after it */
|
||||||
|
|
@ -589,22 +589,23 @@ static int fit_import_data(struct image_tool_params *params, const char *fname)
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
fprintf(stderr, "%s: Can't open %s: %s\n",
|
fprintf(stderr, "%s: Can't open %s: %s\n",
|
||||||
params->cmdname, fname, strerror(errno));
|
params->cmdname, fname, strerror(errno));
|
||||||
free(fdt);
|
ret = -EIO;
|
||||||
return -EIO;
|
goto err_no_fd;
|
||||||
}
|
}
|
||||||
if (write(fd, fdt, new_size) != new_size) {
|
if (write(fd, fdt, new_size) != new_size) {
|
||||||
debug("%s: Failed to write external data to file %s\n",
|
debug("%s: Failed to write external data to file %s\n",
|
||||||
__func__, strerror(errno));
|
__func__, strerror(errno));
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
goto err;
|
goto err_has_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
err:
|
err_has_fd:
|
||||||
|
close(fd);
|
||||||
|
err_no_fd:
|
||||||
munmap(old_fdt, sbuf.st_size);
|
munmap(old_fdt, sbuf.st_size);
|
||||||
free(fdt);
|
free(fdt);
|
||||||
close(fd);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue