From: Ian Thompson Date: Mon, 19 Sep 2022 19:39:50 +0000 (-0700) Subject: target/xtensa: fix final clang analyzer warning X-Git-Url: https://git.gag.com/?p=fw%2Fopenocd;a=commitdiff_plain;h=53d17e790128803a0fed453c4945c07b3377c4d3 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 Change-Id: Ia9ab53336537adebf99f8156f481ca8279a7cd5d Reviewed-on: https://review.openocd.org/c/openocd/+/7211 Tested-by: jenkins Reviewed-by: Antonio Borneo Reviewed-by: Erhan Kurubas --- diff --git a/src/target/xtensa/xtensa.c b/src/target/xtensa/xtensa.c index 1691deeeb..4dfff6ab4 100644 --- a/src/target/xtensa/xtensa.c +++ b/src/target/xtensa/xtensa.c @@ -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; }