This is an automated email from Gerrit.

"Ian Thompson <ia...@cadence.com>" just uploaded a new patch set to Gerrit, 
which you can find at https://review.openocd.org/c/openocd/+/7211

-- gerrit

commit 2fed25f0fbcee09e64d753959fabe94e1423ce92
Author: Ian Thompson <ia...@cadence.com>
Date:   Mon Sep 19 12:39:50 2022 -0700

    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 <ia...@cadence.com>
    Change-Id: Ia9ab53336537adebf99f8156f481ca8279a7cd5d

diff --git a/src/target/xtensa/xtensa.c b/src/target/xtensa/xtensa.c
index 1691deeebb..dd6c22f3ab 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 %" 
TARGET_PRIdADDR " 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;
 }
 

-- 

Reply via email to