target/xtensa: fix final clang analyzer warning

Reworked xtensa_read_memory() logic to always allocate
and initialize working buffer with sufficient padding.

Signed-off-by: Ian Thompson <ianst@cadence.com>
Change-Id: Ia9ab53336537adebf99f8156f481ca8279a7cd5d
Reviewed-on: https://review.openocd.org/c/openocd/+/7211
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-by: Erhan Kurubas <erhan.kurubas@espressif.com>
This commit is contained in:
Ian Thompson 2022-09-19 12:39:50 -07:00 committed by Antonio Borneo
parent 44ed26a1db
commit 53d17e7901
1 changed files with 9 additions and 15 deletions

View File

@ -1738,15 +1738,12 @@ int xtensa_read_memory(struct target *target, target_addr_t address, uint32_t si
}
}
if (addrstart_al == address && addrend_al == address + (size * count)) {
albuff = buffer;
} else {
albuff = malloc(addrend_al - addrstart_al);
if (!albuff) {
LOG_TARGET_ERROR(target, "Out of memory allocating %" TARGET_PRIdADDR " bytes!",
addrend_al - addrstart_al);
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
}
unsigned int alloc_bytes = ALIGN_UP(addrend_al - addrstart_al, sizeof(uint32_t));
albuff = calloc(alloc_bytes, 1);
if (!albuff) {
LOG_TARGET_ERROR(target, "Out of memory allocating %" PRId64 " bytes!",
addrend_al - addrstart_al);
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
}
/* We're going to use A3 here */
@ -1795,11 +1792,8 @@ int xtensa_read_memory(struct target *target, target_addr_t address, uint32_t si
if (bswap)
buf_bswap32(albuff, albuff, addrend_al - addrstart_al);
if (albuff != buffer) {
memcpy(buffer, albuff + (address & 3), (size * count));
free(albuff);
}
memcpy(buffer, albuff + (address & 3), (size * count));
free(albuff);
return res;
}
@ -1855,7 +1849,7 @@ int xtensa_write_memory(struct target *target,
albuff = malloc(addrend_al - addrstart_al);
}
if (!albuff) {
LOG_TARGET_ERROR(target, "Out of memory allocating %" TARGET_PRIdADDR " bytes!",
LOG_TARGET_ERROR(target, "Out of memory allocating %" PRId64 " bytes!",
addrend_al - addrstart_al);
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
}