[Asterisk-code-review] rtp engine: Prevent possible double free with DTLS config (asterisk[13])

Sean Bright asteriskteam at digium.com
Fri Sep 1 16:19:28 CDT 2017


Sean Bright has uploaded this change for review. ( https://gerrit.asterisk.org/6380


Change subject: rtp_engine: Prevent possible double free with DTLS config
......................................................................

rtp_engine: Prevent possible double free with DTLS config

ASTERISK-27225 #close
Reported by: Richard Kenner

Change-Id: I097b81734ef730f8603c0b972909d212a3a5cf89
---
M main/rtp_engine.c
1 file changed, 11 insertions(+), 5 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/80/6380/1

diff --git a/main/rtp_engine.c b/main/rtp_engine.c
index 11c1b93..c615ab7 100644
--- a/main/rtp_engine.c
+++ b/main/rtp_engine.c
@@ -2084,6 +2084,12 @@
 	return NULL;
 }
 
+static void release_cfg_string(char **cfg)
+{
+	ast_free(*cfg);
+	*cfg = NULL;
+}
+
 int ast_rtp_dtls_cfg_parse(struct ast_rtp_dtls_cfg *dtls_cfg, const char *name, const char *value)
 {
 	if (!strcasecmp(name, "dtlsenable")) {
@@ -2105,31 +2111,31 @@
 			return -1;
 		}
 	} else if (!strcasecmp(name, "dtlscertfile")) {
-		ast_free(dtls_cfg->certfile);
+		release_cfg_string(&dtls_cfg->certfile);
 		if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {
 			ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);
 			return -1;
 		}
 		dtls_cfg->certfile = ast_strdup(value);
 	} else if (!strcasecmp(name, "dtlsprivatekey")) {
-		ast_free(dtls_cfg->pvtfile);
+		release_cfg_string(&dtls_cfg->pvtfile);
 		if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {
 			ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);
 			return -1;
 		}
 		dtls_cfg->pvtfile = ast_strdup(value);
 	} else if (!strcasecmp(name, "dtlscipher")) {
-		ast_free(dtls_cfg->cipher);
+		release_cfg_string(&dtls_cfg->cipher);
 		dtls_cfg->cipher = ast_strdup(value);
 	} else if (!strcasecmp(name, "dtlscafile")) {
-		ast_free(dtls_cfg->cafile);
+		release_cfg_string(&dtls_cfg->cafile);
 		if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {
 			ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);
 			return -1;
 		}
 		dtls_cfg->cafile = ast_strdup(value);
 	} else if (!strcasecmp(name, "dtlscapath") || !strcasecmp(name, "dtlscadir")) {
-		ast_free(dtls_cfg->capath);
+		release_cfg_string(&dtls_cfg->capath);
 		if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {
 			ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);
 			return -1;

-- 
To view, visit https://gerrit.asterisk.org/6380
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-MessageType: newchange
Gerrit-Change-Id: I097b81734ef730f8603c0b972909d212a3a5cf89
Gerrit-Change-Number: 6380
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Bright <sean.bright at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20170901/fd9be6f0/attachment.html>


More information about the asterisk-code-review mailing list