[asterisk-bugs] [JIRA] (ASTERISK-29215) res_pjsip_session: NULL active_media_state topology caused asterisk crash

sungtae kim (JIRA) noreply at issues.asterisk.org
Wed Dec 16 20:28:16 CST 2020


sungtae kim created ASTERISK-29215:
--------------------------------------

             Summary: res_pjsip_session: NULL active_media_state topology caused asterisk crash
                 Key: ASTERISK-29215
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-29215
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Resources/res_pjsip_session
    Affects Versions: 18.1.0
            Reporter: sungtae kim
            Severity: Minor


NULL active_media_state topology causing an Asterisk crash

[code]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/sbin/asterisk -f -g -C /etc/asterisk/asterisk.conf'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00005571c1e9faec in ast_stream_topology_get_count (topology=0x0) at stream.c:769
769		return AST_VECTOR_SIZE(&topology->streams);
[Current thread is 1 (Thread 0x7fabe5f88700 (LWP 13628))]
(gdb) where
#0  0x00005571c1e9faec in ast_stream_topology_get_count (topology=0x0) at stream.c:769
#1  0x00005571c1e9f72a in ast_stream_topology_equal (left=0x0, right=0x7fabe80175e8) at stream.c:704
#2  0x00007fabe65a05a4 in sip_session_refresh (session=0x7fabe0066150, on_request_creation=0x0, on_sdp_creation=0x0, on_response=0x7fabe64ffbfc <on_topology_change_response>, 
    method=AST_SIP_SESSION_REFRESH_METHOD_INVITE, generate_new_sdp=1, pending_media_state=0x7fabe8017fb0, active_media_state=0x7fabe0064c70, queued=1) at res_pjsip_session.c:2291
#3  0x00007fabe659a78a in send_delayed_request (session=0x7fabe0066150, delay=0x7fabe00260e0) at res_pjsip_session.c:1400
#4  0x00007fabe659b08b in invite_terminated (vsession=0x7fabe0066150) at res_pjsip_session.c:1512
#5  0x00005571c1ea8254 in ast_taskprocessor_execute (tps=0x7fabe0066920) at taskprocessor.c:1237
#6  0x00005571c1eb1e8f in execute_tasks (data=0x7fabe0066920) at threadpool.c:1354
#7  0x00005571c1ea8254 in ast_taskprocessor_execute (tps=0x5571c300df30) at taskprocessor.c:1237
#8  0x00005571c1eafa93 in threadpool_execute (pool=0x5571c300c950) at threadpool.c:367
#9  0x00005571c1eb16d0 in worker_active (worker=0x7fabf4001340) at threadpool.c:1137
#10 0x00005571c1eb1442 in worker_start (arg=0x7fabf4001340) at threadpool.c:1056
#11 0x00005571c1ebb170 in dummy_start (data=0x5571c2f666e0) at utils.c:1299
#12 0x00007fac07537fa3 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#13 0x00007fac06fcb4cf in clone () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) frame 0
l#0  0x00005571c1e9faec in ast_stream_topology_get_count (topology=0x0) at stream.c:769
i769		return AST_VECTOR_SIZE(&topology->streams);
(gdb) list
764	
765	int ast_stream_topology_get_count(const struct ast_stream_topology *topology)
766	{
767		ast_assert(topology != NULL);
768	
769		return AST_VECTOR_SIZE(&topology->streams);
770	}
771	
772	int ast_stream_topology_get_active_count(const struct ast_stream_topology *topology)
773	{
(gdb) p topology
$1 = (const struct ast_stream_topology *) 0x0
(gdb) f 2
#2  0x00007fabe65a05a4 in sip_session_refresh (session=0x7fabe0066150, on_request_creation=0x0, on_sdp_creation=0x0, on_response=0x7fabe64ffbfc <on_topology_change_response>, 
    method=AST_SIP_SESSION_REFRESH_METHOD_INVITE, generate_new_sdp=1, pending_media_state=0x7fabe8017fb0, active_media_state=0x7fabe0064c70, queued=1) at res_pjsip_session.c:2291
2291					topology_change_request = !ast_stream_topology_equal(active_media_state->topology, pending_media_state->topology);
(gdb) p
$2 = (const struct ast_stream_topology *) 0x0
(gdb) list
2286					 * We need to check if the passed in active and pending states are equal
2287					 * before we run the media states resolver.  We'll use the flag later
2288					 * to signal whether this was topology change or some other change such
2289					 * as a connected line change.
2290					 */
2291					topology_change_request = !ast_stream_topology_equal(active_media_state->topology, pending_media_state->topology);
2292	
2293					ast_trace(-1, "%s: Active media state exists and is%s equal to pending\n", ast_sip_session_get_name(session),
2294						topology_change_request ? " not" : "");
2295					ast_trace(-1, "%s: DP: %s\n", ast_sip_session_get_name(session), ast_str_tmp(256, ast_stream_topology_to_str(pending_media_state->topology, &STR_TMP)));
(gdb) p active_media_state->topology
$3 = (struct ast_stream_topology *) 0x0
(gdb) 
[code]



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list