From 80154c5c7a62a981efdf0f33658b349a1af71e17 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Sat, 24 Oct 2020 18:08:07 +0200 Subject: [PATCH] adiv5_swdp: Fix more memory leak. --- src/platforms/hosted/jlink_adiv5_swdp.c | 8 +++++--- src/platforms/hosted/platform.c | 2 ++ src/target/adiv5_swdp.c | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/platforms/hosted/jlink_adiv5_swdp.c b/src/platforms/hosted/jlink_adiv5_swdp.c index b9deabb..6895b9a 100644 --- a/src/platforms/hosted/jlink_adiv5_swdp.c +++ b/src/platforms/hosted/jlink_adiv5_swdp.c @@ -124,9 +124,6 @@ int jlink_swdp_scan(bmp_info_t *info) { swdptap_init(info); target_list_free(); - ADIv5_DP_t *dp = (void*)calloc(1, sizeof(*dp)); - if (!dp) /* calloc failed: heap exhaustion */ - return 0; uint8_t cmd[44]; cmd[0] = CMD_HW_JTAG3; cmd[1] = 0; @@ -178,6 +175,9 @@ int jlink_swdp_scan(bmp_info_t *info) DEBUG_WARN( "Line reset failed\n"); return 0; } + ADIv5_DP_t *dp = (void*)calloc(1, sizeof(*dp)); + if (!dp) /* calloc failed: heap exhaustion */ + return 0; dp->idcode = jlink_adiv5_swdp_low_access(dp, 1, ADIV5_DP_IDCODE, 0); dp->dp_read = jlink_adiv5_swdp_read; dp->error = jlink_adiv5_swdp_error; @@ -186,6 +186,8 @@ int jlink_swdp_scan(bmp_info_t *info) jlink_adiv5_swdp_error(dp); adiv5_dp_init(dp); + if (!target_list) + free(dp); return target_list?1:0; } diff --git a/src/platforms/hosted/platform.c b/src/platforms/hosted/platform.c index 4d2fd9e..f1f88b8 100644 --- a/src/platforms/hosted/platform.c +++ b/src/platforms/hosted/platform.c @@ -352,6 +352,7 @@ int platform_adiv5_swdp_scan(void) if (target_list) return 1; } + free(dp); break; } case BMP_TYPE_CMSIS_DAP: @@ -363,6 +364,7 @@ int platform_adiv5_swdp_scan(void) if (target_list) return 1; } + free(dp); break; } case BMP_TYPE_JLINK: diff --git a/src/target/adiv5_swdp.c b/src/target/adiv5_swdp.c index 69c771f..4351dd1 100644 --- a/src/target/adiv5_swdp.c +++ b/src/target/adiv5_swdp.c @@ -82,6 +82,8 @@ int adiv5_swdp_scan(void) firmware_swdp_error(dp); adiv5_dp_init(dp); + if (!target_list) + free(dp); return target_list?1:0; }