From: Antonio Borneo Date: Fri, 15 Feb 2019 20:31:02 +0000 (+0100) Subject: aarch64: fix a potential memory leak in aarch64_target_create() X-Git-Tag: v0.11.0-rc1~830 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=f473f84840d0c324df684c49744e32f086595bab aarch64: fix a potential memory leak in aarch64_target_create() If the function aarch64_target_create() exits for an error, the value of pointer aarch64 get lost, causing a memory leak. Move the allocation of aarch64 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: Ib9ad27f4acd940da308c01fdbf33cfe51ab0c639 Signed-off-by: Antonio Borneo Reviewed-on: http://openocd.zylin.com/4924 Reviewed-by: Tomas Vanek Tested-by: jenkins Reviewed-by: Matthias Welwarsky --- diff --git a/src/target/aarch64.c b/src/target/aarch64.c index 63174c2ebc..2357eb2172 100644 --- a/src/target/aarch64.c +++ b/src/target/aarch64.c @@ -2396,11 +2396,17 @@ static int aarch64_init_arch_info(struct target *target, static int aarch64_target_create(struct target *target, Jim_Interp *interp) { struct aarch64_private_config *pc = target->private_config; - struct aarch64_common *aarch64 = calloc(1, sizeof(struct aarch64_common)); + struct aarch64_common *aarch64; if (adiv5_verify_config(&pc->adiv5_config) != ERROR_OK) return ERROR_FAIL; + aarch64 = calloc(1, sizeof(struct aarch64_common)); + if (aarch64 == NULL) { + LOG_ERROR("Out of memory"); + return ERROR_FAIL; + } + return aarch64_init_arch_info(target, aarch64, pc->adiv5_config.dap); }