mirror of
https://github.com/asterisk/asterisk.git
synced 2026-06-30 12:10:12 -07:00
Don't crash when destroying chan_dahdi pseudo channels.
Must do a deep copy of the cc_params in duplicate_pseudo(). Otherwise, when the duplicate pseudo channel is destroyed, it frees the original pseudo channel cc_params. The original pseudo channel is then left with a dangling pointer for when the next duplicated pseudo channel is created. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@262743 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
+10
-1
@@ -12427,6 +12427,15 @@ static struct dahdi_pvt *duplicate_pseudo(struct dahdi_pvt *src)
|
||||
return NULL;
|
||||
}
|
||||
*p = *src;
|
||||
|
||||
/* Must deep copy the cc_params. */
|
||||
p->cc_params = ast_cc_config_params_init();
|
||||
if (!p->cc_params) {
|
||||
ast_free(p);
|
||||
return NULL;
|
||||
}
|
||||
ast_cc_copy_config_params(p->cc_params, src->cc_params);
|
||||
|
||||
p->which_iflist = DAHDI_IFLIST_NONE;
|
||||
p->next = NULL;
|
||||
p->prev = NULL;
|
||||
@@ -17559,7 +17568,7 @@ static void deep_copy_dahdi_chan_conf(struct dahdi_chan_conf *dest, const struct
|
||||
struct ast_cc_config_params *cc_params;
|
||||
|
||||
cc_params = dest->chan.cc_params;
|
||||
memcpy(dest, src, sizeof(dest));
|
||||
*dest = *src;
|
||||
dest->chan.cc_params = cc_params;
|
||||
ast_cc_copy_config_params(dest->chan.cc_params, src->chan.cc_params);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user