We have a crash in kamailio 4.4.4 after t_next_contacts() has been called from 
failure route, if at this very moment when kamailio is preparing new INVITE the 
caller sends a cancel.

#0 build_res_buf_from_sip_req (code=3186024432, code@entry=487, text=0x25, 
new_tag=0x7f8dcf5fb2b0 <tm_tag>, msg=0x7f8dbde6cf78,
returned_len=0xb7, bmark=0x4) at msg_translator.c:2395
#1 0x00007f8dcf35f7b2 in _reply (trans=0x7f8dbde70960, p_msg=0x7f8dbde6cf78, 
code=487, text=<optimized out>, lock=1) at t_reply.c:712
#2 0x00007f8dcf3b5e8b in e2e_cancel (cancel_msg=0x7f8dbde6dff0, 
cancel_msg@entry=0x7f8dd26bb750, t_cancel=0x25,
t_invite=0x7f8dbde70960) at t_fwd.c:1278 

So the scheme is the following: proxy > INVITE < 486 > INVITE* < CANCEL
Victor has investigated this and found that the issue seems to be related to 
the reply lumps added by append_to_reply when processing initial invite. In 
order to reproduce this you need children>=2. 

When first target replies 486 the proxy calls t_next_contacts() and starts 
preparing invite to the next target and at this time another process receives 
cancel and destroys the transaction, the process handling that invite 
message(*) gets crashed.

While we are investigating the possibility to move the append_to_reply calls to 
the branch route, would it be possible to avoid crash by some kind of lock 
mechanism? The thing is that it's not always possible to move append_to_reply 
to the branch route, e.g. our proxy is deployed behind stateless lb with 
multiple interfaces and proxy needs to tell lb which interface to use already 
in the 100 Trying reply it sends to lb as a first thing when receiving a 
message.


-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/872
_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to