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