]> git.sur5r.net Git - openocd/commitdiff
target: remove memory leaks
authorSpencer Oliver <spen@spen-soft.co.uk>
Fri, 28 Mar 2014 11:27:48 +0000 (11:27 +0000)
committerPaul Fertser <fercerpav@gmail.com>
Sat, 29 Mar 2014 08:04:55 +0000 (08:04 +0000)
Found by clang.

Change-Id: Ifb25dca52f8d9e8e46a35f0947a7239f26eb3757
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/2067
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-by: Jörg Wunsch <openocd@uriah.heep.sax.de>
src/target/arm_adi_v5.c
src/target/nds32_cmd.c
src/target/openrisc/or1k.c
src/target/xscale.c

index 4a1e42c026b9e5afe4cca3b9a0ad976c2b5da6db..4bfa7f790d5b235e565c27501823012a50fafad9 100644 (file)
@@ -409,8 +409,10 @@ int mem_ap_read(struct adiv5_dap *dap, uint8_t *buffer, uint32_t size, uint32_t
        }
 
        retval = dap_setup_accessport_tar(dap, address);
-       if (retval != ERROR_OK)
+       if (retval != ERROR_OK) {
+               free(read_buf);
                return retval;
+       }
 
        /* Queue up all reads. Each read will store the entire DRW word in the read buffer. How many
         * useful bytes it contains, and their location in the word, depends on the type of transfer
index 8970fd7eec70c2911dc3bfbc55c1b337a6a7d1c5..faf9e0aef7527639873a5a75014f46743864317f 100644 (file)
@@ -704,18 +704,25 @@ static int jim_nds32_bulk_write(Jim_Interp *interp, int argc, Jim_Obj * const *a
                return e;
 
        uint32_t *data = malloc(count * sizeof(uint32_t));
+       if (data == NULL)
+               return JIM_ERR;
+
        jim_wide i;
        for (i = 0; i < count; i++) {
                jim_wide tmp;
                e = Jim_GetOpt_Wide(&goi, &tmp);
-               if (e != JIM_OK)
+               if (e != JIM_OK) {
+                       free(data);
                        return e;
+               }
                data[i] = (uint32_t)tmp;
        }
 
        /* all args must be consumed */
-       if (goi.argc != 0)
+       if (goi.argc != 0) {
+               free(data);
                return JIM_ERR;
+       }
 
        struct target *target = Jim_CmdPrivData(goi.interp);
        int result;
index a7b3ed278675c24ffc89f47ada23b34c6538179f..f26a01629745615815f2054f69fcc94eaefb101d 100644 (file)
@@ -1169,11 +1169,11 @@ static int or1k_init_target(struct command_context *cmd_ctx,
 
 static int or1k_target_create(struct target *target, Jim_Interp *interp)
 {
-       struct or1k_common *or1k = calloc(1, sizeof(struct or1k_common));
-
        if (target->tap == NULL)
                return ERROR_FAIL;
 
+       struct or1k_common *or1k = calloc(1, sizeof(struct or1k_common));
+
        target->arch_info = or1k;
 
        or1k_create_reg_list(target);
index 99f67aff57abe4dc61c8c3cf29f1832053463265..e88a23112b0dd17f964783fbbccf28abf9c218a5 100644 (file)
@@ -1821,8 +1821,10 @@ static int xscale_read_memory(struct target *target, uint32_t address,
        /* receive data from target (count times 32-bit words in host endianness) */
        buf32 = malloc(4 * count);
        retval = xscale_receive(target, buf32, count);
-       if (retval != ERROR_OK)
+       if (retval != ERROR_OK) {
+               free(buf32);
                return retval;
+       }
 
        /* extract data from host-endian buffer into byte stream */
        for (i = 0; i < count; i++) {