[asterisk-commits] kpfleming: branch 1.6.0 r185954 - in /branches/1.6.0: ./ channels/chan_dahdi.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Apr 2 08:52:38 CDT 2009
Author: kpfleming
Date: Thu Apr 2 08:52:35 2009
New Revision: 185954
URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=185954
Log:
Merged revisions 185953 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r185953 | kpfleming | 2009-04-02 08:51:44 -0500 (Thu, 02 Apr 2009) | 11 lines
Merged revisions 185952 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r185952 | kpfleming | 2009-04-02 08:43:43 -0500 (Thu, 02 Apr 2009) | 5 lines
the DAHDI_GETCONF, DAHDI_SETCONF and DAHDI_GET_PARAMS ioctls were recently corrected to show that they do, in fact, read data from userspace as part of their work. due to this fix, valgrind now reports a number of cases where chan_dahdi passed an uninitialized (or partially) buffer to these ioctls, which could lead to unexpected behavior.
this patch corrects chan_dahdi to ensure that buffers passed to these ioctls are always fully initialized.
........
................
Modified:
branches/1.6.0/ (props changed)
branches/1.6.0/channels/chan_dahdi.c
Propchange: branches/1.6.0/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.
Modified: branches/1.6.0/channels/chan_dahdi.c
URL: http://svn.digium.com/svn-view/asterisk/branches/1.6.0/channels/chan_dahdi.c?view=diff&rev=185954&r1=185953&r2=185954
==============================================================================
--- branches/1.6.0/channels/chan_dahdi.c (original)
+++ branches/1.6.0/channels/chan_dahdi.c Thu Apr 2 08:52:35 2009
@@ -1859,9 +1859,6 @@
/* Don't delete if we don't think it's conferenced at all (implied) */
) return 0;
memset(&zi, 0, sizeof(zi));
- zi.chan = 0;
- zi.confno = 0;
- zi.confmode = 0;
if (ioctl(c->dfd, DAHDI_SETCONF, &zi)) {
ast_log(LOG_WARNING, "Failed to drop %d from conference %d/%d: %s\n", c->dfd, c->curconf.confmode, c->curconf.confno, strerror(errno));
return -1;
@@ -1917,11 +1914,12 @@
static int reset_conf(struct dahdi_pvt *p)
{
- struct dahdi_confinfo zi;
- memset(&zi, 0, sizeof(zi));
p->confno = -1;
memset(&p->subs[SUB_REAL].curconf, 0, sizeof(p->subs[SUB_REAL].curconf));
if (p->subs[SUB_REAL].dfd > -1) {
+ struct dahdi_confinfo zi;
+
+ memset(&zi, 0, sizeof(zi));
if (ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETCONF, &zi))
ast_log(LOG_WARNING, "Failed to reset conferencing on channel %d: %s\n", p->channel, strerror(errno));
}
@@ -2235,8 +2233,7 @@
p->saveconf.confmode = 0;
return -1;
}
- c.chan = 0;
- c.confno = 0;
+ memset(&c, 0, sizeof(c));
c.confmode = DAHDI_CONF_NORMAL;
res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETCONF, &c);
if (res) {
@@ -3617,6 +3614,7 @@
case SIG_FXOGS:
case SIG_FXOLS:
case SIG_FXOKS:
+ memset(&par, 0, sizeof(par));
res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &par);
if (!res) {
#if 0
@@ -4572,6 +4570,7 @@
}
/* No alarms on the span. Check for channel alarms. */
+ memset(¶ms, 0, sizeof(params));
if ((res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, ¶ms)) >= 0)
return params.chan_alarms;
@@ -5169,6 +5168,7 @@
{
struct dahdi_params par;
+ memset(&par, 0, sizeof(par));
if (ioctl(p->oprpeer->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &par) != -1)
{
if (!par.rxisoffhook)
@@ -5662,6 +5662,7 @@
{
struct dahdi_params ps;
+ memset(&ps, 0, sizeof(ps));
ps.channo = p->channel;
if (ioctl(p->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &ps) < 0) {
ast_mutex_unlock(&p->lock);
@@ -6280,6 +6281,7 @@
if (!tmp)
return NULL;
tmp->tech = &dahdi_tech;
+ memset(&ps, 0, sizeof(ps));
ps.channo = i->channel;
res = ioctl(i->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &ps);
if (res) {
@@ -8745,9 +8747,10 @@
#endif
} else {
chan_sig = tmp->sig;
- memset(&p, 0, sizeof(p));
- if (tmp->subs[SUB_REAL].dfd > -1)
+ if (tmp->subs[SUB_REAL].dfd > -1) {
+ memset(&p, 0, sizeof(p));
res = ioctl(tmp->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &p);
+ }
}
/* Adjust starttime on loopstart and kewlstart trunks to reasonable values */
switch (chan_sig) {
@@ -9089,9 +9092,10 @@
if (!p->sig || (p->sig == SIG_FXSLS))
return 1;
/* Check hook state */
- if (p->subs[SUB_REAL].dfd > -1)
+ if (p->subs[SUB_REAL].dfd > -1) {
+ memset(&par, 0, sizeof(par));
res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &par);
- else {
+ } else {
/* Assume not off hook on CVRS */
res = 0;
par.rxisoffhook = 0;
@@ -10304,6 +10308,7 @@
if (!explicit) {
spanfd = pri_active_dchan_fd(pri);
+ memset(¶m, 0, sizeof(param));
if (ioctl(spanfd, DAHDI_GET_PARAMS, ¶m))
return -1;
span = pris[param.spanno - 1].prilogicalspan;
@@ -11741,6 +11746,7 @@
ast_log(LOG_ERROR, "Unable to open D-channel %d (%s)\n", x, strerror(errno));
return -1;
}
+ memset(&p, 0, sizeof(p));
res = ioctl(pri->fds[i], DAHDI_GET_PARAMS, &p);
if (res) {
dahdi_close_pri_fd(pri, i);
@@ -12640,12 +12646,14 @@
memset(&ci, 0, sizeof(ci));
ps.channo = tmp->channel;
if (tmp->subs[SUB_REAL].dfd > -1) {
+ memset(&ci, 0, sizeof(ci));
if (!ioctl(tmp->subs[SUB_REAL].dfd, DAHDI_GETCONF, &ci)) {
ast_cli(a->fd, "Actual Confinfo: Num/%d, Mode/0x%04x\n", ci.confno, ci.confmode);
}
if (!ioctl(tmp->subs[SUB_REAL].dfd, DAHDI_GETCONFMUTE, &x)) {
ast_cli(a->fd, "Actual Confmute: %s\n", x ? "Yes" : "No");
}
+ memset(&ps, 0, sizeof(ps));
if (ioctl(tmp->subs[SUB_REAL].dfd, DAHDI_GET_PARAMS, &ps) < 0) {
ast_log(LOG_WARNING, "Failed to get parameters on channel %d: %s\n", tmp->channel, strerror(errno));
} else {
@@ -13305,6 +13313,7 @@
ast_log(LOG_ERROR, "Unable to open SS7 sigchan %d (%s)\n", sigchan, strerror(errno));
return -1;
}
+ memset(&p, 0, sizeof(p));
res = ioctl(link->fds[curfd], DAHDI_GET_PARAMS, &p);
if (res) {
dahdi_close_ss7_fd(link, curfd);
More information about the asterisk-commits
mailing list