dect
/
asterisk
Archived
13
0
Fork 0

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: http://svn.digium.com/svn/asterisk/trunk@262743 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
rmudgett 2010-05-12 17:57:31 +00:00
parent 506141155e
commit a7c27a68f7
1 changed files with 10 additions and 1 deletions

View File

@ -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);
}