[packages/asterisk] patch to fix chan_pjsip crash on DNS errors

jajcus jajcus at pld-linux.org
Fri Feb 3 09:25:34 CET 2017


commit 161d3fd57bacf39d7a8e1245edc9917da68f39c5
Author: Jacek Konieczny <j.konieczny at eggsoft.pl>
Date:   Fri Feb 3 09:24:13 2017 +0100

    patch to fix chan_pjsip crash on DNS errors
    
    fixes:
    https://issues.asterisk.org/jira/browse/ASTERISK-26679
    https://issues.asterisk.org/jira/browse/ASTERISK-26699

 ASTERISK-26679.patch | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 asterisk.spec        |  4 ++-
 2 files changed, 79 insertions(+), 1 deletion(-)
---
diff --git a/asterisk.spec b/asterisk.spec
index 0a8660f..ad52c9e 100644
--- a/asterisk.spec
+++ b/asterisk.spec
@@ -38,7 +38,7 @@ Summary:	Asterisk PBX
 Summary(pl.UTF-8):	Centralka (PBX) Asterisk
 Name:		asterisk
 Version:	13.13.1
-Release:	1
+Release:	2
 License:	GPL v2
 Group:		Applications/System
 Source0:	http://downloads.digium.com/pub/asterisk/releases/%{name}-%{version}.tar.gz
@@ -63,6 +63,7 @@ Patch5:		%{name}-histedit.patch
 Patch6:		x32.patch
 Patch7:		%{name}-ilbc.patch
 Patch8:		asterisk-opus.patch
+Patch9:		ASTERISK-26679.patch
 URL:		http://www.asterisk.org/
 BuildRequires:	OSPToolkit-devel >= 4.0.0
 %{?with_oss:BuildRequires:	SDL-devel}
@@ -756,6 +757,7 @@ Dokumentacja API Asteriska.
 %patch5 -p1
 %patch6 -p1
 %patch7 -p1
+%patch9 -p1
 
 %if %{with opus_vp8}
 %patch8 -p1
diff --git a/ASTERISK-26679.patch b/ASTERISK-26679.patch
new file mode 100644
index 0000000..a620162
--- /dev/null
+++ b/ASTERISK-26679.patch
@@ -0,0 +1,76 @@
+From e371e13b9eb6ce1f60bf31a8d25c7d4bdcd01d8d Mon Sep 17 00:00:00 2001
+From: Joshua Colp <jcolp at digium.com>
+Date: Tue, 31 Jan 2017 17:17:50 +0000
+Subject: [PATCH] res_pjsip: Handle invocation of callback on outgoing request when error occurs.
+
+There are some error cases in PJSIP when sending a request that will
+result in the callback for the request being invoked.  The code did not
+handle this case and assumed on every error case that the callback was not
+invoked.
+
+The code has been changed to check whether the callback has been invoked
+and if so to absorb the error and treat it as a success.
+
+ASTERISK-26679
+ASTERISK-26699
+
+Change-Id: I563982ba204da5aa1428989a11c06dd9087fea91
+---
+
+diff --git a/res/res_pjsip.c b/res/res_pjsip.c
+index 12c3baa..c35b782 100644
+--- a/res/res_pjsip.c
++++ b/res/res_pjsip.c
+@@ -3402,6 +3402,8 @@
+ 	void (*callback)(void *token, pjsip_event *e);
+ 	/*! Non-zero when the callback is called. */
+ 	unsigned int cb_called;
++	/*! Non-zero if endpt_send_request_cb() was called. */
++	unsigned int send_cb_called;
+ 	/*! Timeout timer. */
+ 	pj_timer_entry *timeout_timer;
+ 	/*! Original timeout. */
+@@ -3418,6 +3420,12 @@
+ {
+ 	struct send_request_wrapper *req_wrapper = token;
+ 	unsigned int cb_called;
++
++	/*
++	 * Needed because we cannot otherwise tell if this callback was
++	 * called when pjsip_endpt_send_request() returns error.
++	 */
++	req_wrapper->send_cb_called = 1;
+ 
+ 	if (e->body.tsx_state.type == PJSIP_EVENT_TIMER) {
+ 		ast_debug(2, "%p: PJSIP tsx timer expired\n", req_wrapper);
+@@ -3602,12 +3610,10 @@
+ 	if (ret_val != PJ_SUCCESS) {
+ 		char errmsg[PJ_ERR_MSG_SIZE];
+ 
+-		/*
+-		 * endpt_send_request_cb is not expected to ever be called
+-		 * because the request didn't get far enough to attempt
+-		 * sending.
+-		 */
+-		ao2_ref(req_wrapper, -1);
++		if (!req_wrapper->send_cb_called) {
++			/* endpt_send_request_cb is not expected to ever be called now. */
++			ao2_ref(req_wrapper, -1);
++		}
+ 
+ 		/* Complain of failure to send the request. */
+ 		pj_strerror(ret_val, errmsg, sizeof(errmsg));
+@@ -3644,6 +3650,13 @@
+ 				req_wrapper->cb_called = 1;
+ 			}
+ 			ao2_unlock(req_wrapper);
++		} else if (req_wrapper->cb_called) {
++			/*
++			 * We cannot report any error.  The callback has
++			 * already freed any resources associated with
++			 * token.
++			 */
++			ret_val = PJ_SUCCESS;
+ 		}
+ 	}
+ 
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/asterisk.git/commitdiff/161d3fd57bacf39d7a8e1245edc9917da68f39c5



More information about the pld-cvs-commit mailing list