target/xtensa: fix clang analyzer warnings and gcc12 build errors 37/7137/2
authorErhan Kurubas <erhan.kurubas@espressif.com>
Sat, 20 Aug 2022 20:22:47 +0000 (23:22 +0300)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 21 Aug 2022 22:04:07 +0000 (22:04 +0000)
Fix Unused code Dead assignment at line 657
Fix Memory error Double free at line 2851
Fix Memory error Memory leak at line 2530
Fix error: 'a3' may be used uninitialized at line 758
Fix error: '%04x' directive writing between 4 and 8 bytes
into a region of size 5 at line 2471

Signed-off-by: Erhan Kurubas <erhan.kurubas@espressif.com>
Change-Id: I0382a622bc7c4108a335fd741816577e79240397
Reviewed-on: https://review.openocd.org/c/openocd/+/7137
Tested-by: jenkins
Reviewed-by: Ian Thompson <ianst@cadence.com>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/target/xtensa/xtensa.c

index fe0f43882b09106299d6ad958717645d8bc5da4e..4e18e3eb480ca214078cca5cb5139a70f73ad8d9 100644 (file)
@@ -591,7 +591,7 @@ static int xtensa_write_dirty_registers(struct target *target)
        unsigned int reg_list_size = xtensa->core_cache->num_regs;
        bool preserve_a3 = false;
        uint8_t a3_buf[4];
-       xtensa_reg_val_t a3, woe;
+       xtensa_reg_val_t a3 = 0, woe;
 
        LOG_TARGET_DEBUG(target, "start");
 
@@ -655,6 +655,8 @@ static int xtensa_write_dirty_registers(struct target *target)
                xtensa_queue_exec_ins(xtensa, XT_INS_WSR(xtensa, XT_SR_DDR, XT_REG_A3));
                xtensa_queue_dbg_reg_read(xtensa, NARADR_DDR, a3_buf);
                res = jtag_execute_queue();
+               if (res != ERROR_OK)
+                       return res;
                xtensa_core_status_check(target);
                a3 = buf_get_u32(a3_buf, 0, 32);
        }
@@ -2468,7 +2470,7 @@ static int xtensa_build_reg_cache(struct target *target)
                        LOG_TARGET_ERROR(target, "ERROR: Out of memory");
                        goto fail;
                }
-               sprintf((char *)xtensa->empty_regs[i].name, "?0x%04x", i);
+               sprintf((char *)xtensa->empty_regs[i].name, "?0x%04x", i & 0x0000FFFF);
                xtensa->empty_regs[i].size = 32;
                xtensa->empty_regs[i].type = &xtensa_reg_type;
                xtensa->empty_regs[i].value = calloc(1, 4 /*XT_REG_LEN*/);      /* make Clang Static Analyzer happy */
@@ -2526,6 +2528,7 @@ fail:
        if (reg_list) {
                for (unsigned int i = 0; i < reg_list_size; i++)
                        free(reg_list[i].value);
+               free(reg_list);
        }
        if (xtensa->empty_regs) {
                for (unsigned int i = 0; i < xtensa->dbregs_num; i++) {
@@ -2847,7 +2850,7 @@ int xtensa_init_arch_info(struct target *target, struct xtensa *xtensa,
        for (enum xtensa_ar_scratch_set_e s = 0; s < XT_AR_SCRATCH_NUM; s++) {
                xtensa->scratch_ars[s].chrval = calloc(8, sizeof(char));
                if (!xtensa->scratch_ars[s].chrval) {
-                       for (enum xtensa_ar_scratch_set_e f = s - 1; s >= 0; s--)
+                       for (enum xtensa_ar_scratch_set_e f = 0; f < s; f++)
                                free(xtensa->scratch_ars[f].chrval);
                        free(xtensa->core_config);
                        LOG_ERROR("Xtensa scratch AR alloc failed\n");

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)