If the function mem_ap_target_create() exits for an error, the
value of pointer mem_ap get lost, causing a memory leak.
Move the allocation of mem_ap after the check on the parameters.
While there, add a check on the value returned by calloc().
Issue highlighted by clang 7.0.0.
Change-Id: Ia2c11b14fde9694f28bf6efe01d278923db0f0d4
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4923
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
static int mem_ap_target_create(struct target *target, Jim_Interp *interp)
{
- struct mem_ap *mem_ap = calloc(1, sizeof(struct mem_ap));
+ struct mem_ap *mem_ap;
struct adiv5_private_config *pc;
pc = (struct adiv5_private_config *)target->private_config;
return ERROR_FAIL;
}
+ mem_ap = calloc(1, sizeof(struct mem_ap));
+ if (mem_ap == NULL) {
+ LOG_ERROR("Out of memory");
+ return ERROR_FAIL;
+ }
+
mem_ap->ap_num = pc->ap_num;
mem_ap->arm.common_magic = ARM_COMMON_MAGIC;
mem_ap->arm.dap = pc->dap;