<p>Sean Bright has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/6381">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">rtp_engine: Prevent possible double free with DTLS config<br><br>ASTERISK-27225 #close<br>Reported by: Richard Kenner<br><br>Change-Id: I097b81734ef730f8603c0b972909d212a3a5cf89<br>---<br>M main/rtp_engine.c<br>1 file changed, 11 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/81/6381/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/main/rtp_engine.c b/main/rtp_engine.c<br>index 8d6c337..c05d8fc 100644<br>--- a/main/rtp_engine.c<br>+++ b/main/rtp_engine.c<br>@@ -2681,6 +2681,12 @@<br>       return NULL;<br> }<br> <br>+static void release_cfg_string(char **cfg)<br>+{<br>+ ast_free(*cfg);<br>+      *cfg = NULL;<br>+}<br>+<br> int ast_rtp_dtls_cfg_parse(struct ast_rtp_dtls_cfg *dtls_cfg, const char *name, const char *value)<br> {<br>  if (!strcasecmp(name, "dtlsenable")) {<br>@@ -2702,31 +2708,31 @@<br>                     return -1;<br>            }<br>     } else if (!strcasecmp(name, "dtlscertfile")) {<br>-            ast_free(dtls_cfg->certfile);<br>+             release_cfg_string(&dtls_cfg->certfile);<br>               if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {<br>                        ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);<br>                  return -1;<br>            }<br>             dtls_cfg->certfile = ast_strdup(value);<br>    } else if (!strcasecmp(name, "dtlsprivatekey")) {<br>-          ast_free(dtls_cfg->pvtfile);<br>+              release_cfg_string(&dtls_cfg->pvtfile);<br>                if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {<br>                        ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);<br>                  return -1;<br>            }<br>             dtls_cfg->pvtfile = ast_strdup(value);<br>     } else if (!strcasecmp(name, "dtlscipher")) {<br>-              ast_free(dtls_cfg->cipher);<br>+               release_cfg_string(&dtls_cfg->cipher);<br>                 dtls_cfg->cipher = ast_strdup(value);<br>      } else if (!strcasecmp(name, "dtlscafile")) {<br>-              ast_free(dtls_cfg->cafile);<br>+               release_cfg_string(&dtls_cfg->cafile);<br>                 if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {<br>                        ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);<br>                  return -1;<br>            }<br>             dtls_cfg->cafile = ast_strdup(value);<br>      } else if (!strcasecmp(name, "dtlscapath") || !strcasecmp(name, "dtlscadir")) {<br>-          ast_free(dtls_cfg->capath);<br>+               release_cfg_string(&dtls_cfg->capath);<br>                 if (!ast_strlen_zero(value) && !ast_file_is_readable(value)) {<br>                        ast_log(LOG_ERROR, "%s file %s does not exist or is not readable\n", name, value);<br>                  return -1;<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/6381">change 6381</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/6381"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 14 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I097b81734ef730f8603c0b972909d212a3a5cf89 </div>
<div style="display:none"> Gerrit-Change-Number: 6381 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Sean Bright <sean.bright@gmail.com> </div>