From: Matthew Jordan Date: Mon, 23 Apr 2012 14:05:02 +0000 (+0000) Subject: AST-2012-006: Fix crash in UPDATE handling when no channel owner exists X-Git-Tag: 1.8.13.0-rc1~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=88f80c1d54a47e950141b10b97bd0c287f280ac1;p=thirdparty%2Fasterisk.git AST-2012-006: Fix crash in UPDATE handling when no channel owner exists If Asterisk receives a SIP UPDATE request after a call has been terminated and the channel has been destroyed but before the SIP dialog has been destroyed, a condition exists where a connected line update would be attempted on a non-existing channel. This would cause Asterisk to crash. The patch resolves this by first ensuring that the SIP dialog has an owning channel before attempting a connected line update. If an UPDATE request is received and no channel is associated with the dialog, a 481 response is sent. (closes issue ASTERISK-19770) Reported by: Thomas Arimont Tested by: Matt Jordan Patches: ASTERISK-19278-2012-04-16.diff uploaded by Matt Jordan (license 6283) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@363106 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 960af57035..865016ca82 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -22148,6 +22148,10 @@ static int handle_request_update(struct sip_pvt *p, struct sip_request *req) transmit_response(p, "501 Method Not Implemented", req); return 0; } + if (!p->owner) { + transmit_response(p, "481 Call/Transaction Does Not Exist", req); + return 0; + } if (get_rpid(p, req)) { struct ast_party_connected_line connected; struct ast_set_party_connected_line update_connected;