[asterisk-dev] crash chan_misdn 0.3 [asterisk 1.2 svn]
Martin Vít
vit at lam.cz
Mon Mar 5 09:27:44 MST 2007
Hello guyes. Hhope, that this is right place to discuss this.
I'm expiriencing crash in isdn_lib.c which dereferences stack pointer
which is null (get_stack_by_bc(bc) return NULL pointer, see --- code ---
below..)
Here is full backtrace.
#0 0xb7873e3a in misdn_lib_tx2misdn_frm (bc=0x818389c, data=0x9681e68,
len=320) at isdn_lib.c:4016
stack = (struct misdn_stack *) 0x0
buf =
"ÓÓÓÓ\200\002\022\000\000\000\000\000@\001\000\000űë\n\232â˛\222Ž.în\216\016Nžţ~\236\036\236ţN\216Ž\202:k[ó/\017ż?˙˙?żĎ\217/Ż\223ł\203Ł\233űKkŤę\núZbBr\022ŇŇŇ\222ňB\202\"\032:ĘęŤk\vKKKKKKKKťË\213ëŞjJ:::Jjë;[C\223ÓÓó\003Łűë\núÚ\"âZz:ĘjŤ\213K;{Ű[\033{űËë*\212Jú\232\032ÚÚÚ\232\032Ú\232z\232\232:J\212ę+K\233[#ă#Ű{ť\213+*j\212\nĘĘĘĘĘĘ\n*ë\213Ëť;ťK\v\213ëŤë\213"...
frm = (iframe_t *) 0xb4935990
r = 536870912
#1 0xb786153b in misdn_write (ast=0x8851c20, frame=0x9681df8) at
chan_misdn.c:2313
ch = (struct chan_list *) 0x93fe588
__PRETTY_FUNCTION__ = "misdn_write"
#2 0x0806520b in ast_write (chan=0x8851c20, fr=0x9510388) at channel.c:2340
res = -1
f = (struct ast_frame *) 0x9681df8
__PRETTY_FUNCTION__ = "ast_write"
#3 0x08068e02 in ast_channel_bridge (c0=0x86a0e08, c1=0x8851c20,
config=0xb4937740, fo=0xb4936bf0, rc=0xb4936bf4) at channel.c:3427
now = The value of variable 'now' is distributed across several
locations, and GDB cannot access its value.
---- code ----
int misdn_lib_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len)
{
struct misdn_stack *stack=get_stack_by_bc(bc);
switch (bc->bc_state) {
case BCHAN_ACTIVATED:
case BCHAN_BRIDGED:
break;
default:
cb_log(3, bc->port, "BC not yet activated
(state:%s)\n",bc_state2str(bc->bc_state));
return -1;
}
unsigned char buf[4096 + mISDN_HEADER_LEN];
iframe_t *frm= (iframe_t*)buf;
int r;
frm->prim = DL_DATA|REQUEST;
frm->dinfo = 0;
frm->addr = bc->addr | FLG_MSG_DOWN ;
frm->len = len;
memcpy(&buf[mISDN_HEADER_LEN], data,len);
if ( misdn_cap_is_speech(bc->capability) )
flip_buf_bits( &buf[mISDN_HEADER_LEN], len);
else
cb_log(6, stack->port, "Writing %d data bytes\n",len);
cb_log(9, stack->port, "Writing %d bytes 2 mISDN\n",len);
r=mISDN_write(stack->midev, buf, frm->len + mISDN_HEADER_LEN,
TIMEOUT_INFINIT);
return 0;
}
--------------------
--
Martin Vít
LAM plus s.r.o.
http://www.lam.cz/
Tel.: 605 267 610
More information about the asterisk-dev
mailing list