[Home]

Summary:ASTERISK-24970: Crash in res_pjsip_pubsub handling of failed notify
Reporter:Scott Griepentrog (sgriepentrog)Labels:
Date Opened:2015-04-16 12:55:27Date Closed:2015-04-17 14:40:57
Priority:MajorRegression?
Status:Closed/CompleteComponents:Resources/res_pjsip_pubsub
Versions:13.3.2 Frequency of
Occurrence
Related
Issues:
Environment:Attachments:
Description:During startup of Asterisk under the right conditions (various pjsip subscriptions in flight), a crash can occur where a deleted tree is referenced.

Valgrind output (first invalid read):

{noformat}
==21514== Thread 29:
==21514== Invalid read of size 8
==21514==    at 0x136D8883: send_notify (res_pjsip_pubsub.c:2059)
==21514==    by 0x136D9245: pubsub_on_rx_subscribe_request (res_pjsip_pubsub.c:2605)
==21514==    by 0x136D993F: pubsub_on_rx_request (res_pjsip_pubsub.c:3090)
==21514==    by 0x127F85A6: pjsip_endpt_process_rx_data (in /usr/lib/libpjsip.so.2)
==21514==    by 0x16065238: distribute (pjsip_distributor.c:348)
==21514==    by 0x5E9CF2: ast_taskprocessor_execute (taskprocessor.c:769)
==21514==    by 0x5F4111: threadpool_execute (threadpool.c:351)
==21514==    by 0x5F562F: worker_active (threadpool.c:1075)
==21514==    by 0x5F53EC: worker_start (threadpool.c:995)
==21514==    by 0x6015BD: dummy_start (utils.c:1237)
==21514==    by 0x6725181: start_thread (pthread_create.c:312)
==21514==    by 0x74A247C: clone (clone.S:111)
==21514==  Address 0x931de08 is 120 bytes inside a block of size 176 free'd
==21514==    at 0x4C2BDEC: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==21514==    by 0x45DA3D: internal_ao2_ref (astobj2.c:461)
==21514==    by 0x45DCCC: __ao2_ref (astobj2.c:516)
==21514==    by 0x45DD3C: __ao2_cleanup (astobj2.c:529)
==21514==    by 0x136D365A: pubsub_on_evsub_state (res_pjsip_pubsub.c:3111)
==21514==    by 0x123A7727: set_state (in /usr/lib/libpjsip-simple.so.2)
==21514==    by 0x123A880F: pjsip_evsub_terminate (in /usr/lib/libpjsip-simple.so.2)
==21514==    by 0x136D94ED: pubsub_on_rx_subscribe_request (res_pjsip_pubsub.c:2603)
==21514==    by 0x136D993F: pubsub_on_rx_request (res_pjsip_pubsub.c:3090)
==21514==    by 0x127F85A6: pjsip_endpt_process_rx_data (in /usr/lib/libpjsip.so.2)
==21514==    by 0x16065238: distribute (pjsip_distributor.c:348)
==21514==    by 0x5E9CF2: ast_taskprocessor_execute (taskprocessor.c:769)
{noformat}

The invalid read in send_notify() is of sub_tree->evsub where sub_tree is passed in from pubsub_on_rx_subscribe_request() and was recently created via create_subscription_tree().  However, prior to the invalid reference of subtree, it was free'd indirectly by the call to pjsip_evsub_terminate() in the case that generate_initial_notify() fails.
Comments: