target/xtensa: fix memory leaks in reg_cache
There are two allocated fields that are never freed, contiguous_regs_desc and contiguous_regs_list. Additionally, prevent memory leaks and invalid accesses when xtregs command is called repeatedly. Change-Id: Id6ab4a2565ddb19e1e9d3f1c3b822182b3a6fb9d Signed-off-by: Samuel Obuch <samuel.obuch@espressif.com> Reviewed-on: https://review.openocd.org/c/openocd/+/9113 Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com> Tested-by: jenkins Reviewed-by: Ian Thompson <ianst+cdns@cadence.com>
This commit is contained in:
committed by
Antonio Borneo
parent
587c783103
commit
28eb4c37b9
@@ -3493,6 +3493,10 @@ static void xtensa_free_reg_cache(struct target *target)
|
||||
free(xtensa->optregs);
|
||||
}
|
||||
xtensa->optregs = NULL;
|
||||
free(xtensa->contiguous_regs_desc);
|
||||
xtensa->contiguous_regs_desc = NULL;
|
||||
free(xtensa->contiguous_regs_list);
|
||||
xtensa->contiguous_regs_list = NULL;
|
||||
}
|
||||
|
||||
void xtensa_target_deinit(struct target *target)
|
||||
@@ -3896,6 +3900,10 @@ COMMAND_HELPER(xtensa_cmd_xtreg_do, struct xtensa *xtensa)
|
||||
xtensa->total_regs_num = numregs;
|
||||
xtensa->core_regs_num = 0;
|
||||
xtensa->num_optregs = 0;
|
||||
/* Prevent memory leak in case xtregs is called twice */
|
||||
free(xtensa->optregs);
|
||||
free(xtensa->contiguous_regs_desc);
|
||||
xtensa->contiguous_regs_desc = NULL;
|
||||
/* A little more memory than required, but saves a second initialization pass */
|
||||
xtensa->optregs = calloc(xtensa->total_regs_num, sizeof(struct xtensa_reg_desc));
|
||||
if (!xtensa->optregs) {
|
||||
|
||||
Reference in New Issue
Block a user