This is an automated email from Gerrit. Christian Eggers (cegg...@gmx.de) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/1917
-- gerrit commit c61adc736d89327ccd9664ee3380546d447aafc7 Author: Christian Eggers <cegg...@gmx.de> Date: Sat Feb 1 20:02:18 2014 +0100 topic: Fix memory leaks in users of get_reg_features_list() In contrast to target_get_gdb_reg_list(), the list returned by get_reg_features_list() consists of items which are itself malloc'ed. --> Free the list items prior freeing the list itself. Additionally: - gdb_generate_target_description(): o Do error handling similar as gdb_get_target_description_chunk() does. - gdb_get_target_description_chunk() o **features must be initialised prior an "goto error" can happen Change-Id: Iad07824618c51084e0aa0499ee6fc96198b320f0 Signed-off-by: Christian Eggers <cegg...@gmx.de> diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 91016e4..149af77 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -2029,8 +2029,10 @@ static int get_reg_features_list(struct target *target, char **feature_list[], i static int gdb_generate_target_description(struct target *target, char **tdesc_out) { int retval = ERROR_OK; - struct reg **reg_list; + struct reg **reg_list = NULL; int reg_list_size; + char **features = NULL; + int feature_list_size = 0; char *tdesc = NULL; int pos = 0; int size = 0; @@ -2040,21 +2042,20 @@ static int gdb_generate_target_description(struct target *target, char **tdesc_o if (retval != ERROR_OK) { LOG_ERROR("get register list failed"); - return ERROR_FAIL; + retval = ERROR_FAIL; + goto error; } if (reg_list_size <= 0) { - free(reg_list); - return ERROR_FAIL; + retval = ERROR_FAIL; } - char **features = NULL; /* Get a list of available target registers features */ - retval = get_reg_features_list(target, &features, NULL, reg_list, reg_list_size); + retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size); if (retval != ERROR_OK) { LOG_ERROR("Can't get the registers feature list"); - free(reg_list); - return ERROR_FAIL; + retval = ERROR_FAIL; + goto error; } /* If we found some features associated with registers, create sections */ @@ -2134,8 +2135,12 @@ static int gdb_generate_target_description(struct target *target, char **tdesc_o xml_printf(&retval, &tdesc, &pos, &size, "</target>\n"); - free(reg_list); +error: + + for (int j = feature_list_size - 1; j >= 0; j--) + free(features[j]); free(features); + free(reg_list); if (retval == ERROR_OK) *tdesc_out = tdesc; @@ -2204,6 +2209,7 @@ static int gdb_target_description_supported(struct target *target, int *supporte int retval = ERROR_OK; struct reg **reg_list = NULL; int reg_list_size = 0; + char **features = NULL; int feature_list_size = 0; retval = target_get_gdb_reg_list(target, ®_list, @@ -2218,7 +2224,6 @@ static int gdb_target_description_supported(struct target *target, int *supporte goto error; } - char **features = NULL; /* Get a list of available target registers features */ retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size); if (retval != ERROR_OK) { @@ -2234,11 +2239,12 @@ static int gdb_target_description_supported(struct target *target, int *supporte } error: - if (reg_list != NULL) - free(reg_list); - if (features != NULL) - free(features); + for (int j = feature_list_size - 1; j >= 0; j--) + free(features[j]); + free(features); + + free(reg_list); return retval; } -- ------------------------------------------------------------------------------ WatchGuard Dimension instantly turns raw network data into actionable security intelligence. It gives you real-time visual feedback on key security issues and trends. Skip the complicated setup - simply import a virtual appliance and go from zero to informed in seconds. http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk _______________________________________________ OpenOCD-devel mailing list OpenOCD-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openocd-devel