[OpenSIPS-Users] infinite loop in rtpengine rtpe_function_call()

Bogdan-Andrei Iancu bogdan at opensips.org
Mon Feb 26 12:35:09 UTC 2024


Thanks Alexander, let's continue over there.

Regards,

Bogdan-Andrei Iancu

OpenSIPS Founder and Developer
   https://www.opensips-solutions.com
   https://www.siphub.com

On 24.02.2024 17:17, Alexander Kogan wrote:
>
> Hi,
>
> it's submitted as https://github.com/OpenSIPS/opensips/issues/3314
>
> Best regards,
> Alexander Kogan,
> Director of R&D
> 5g Future
> http://5gfuture.com
> On 23.02.2024 15:56, Bogdan-Andrei Iancu wrote:
>> Hi Alexander,
>>
>> Thank for your report - it will be better to push this via the github 
>> tracker, the right place for coding issues:
>> https://github.com/OpenSIPS/opensips/issues
>> Bogdan-Andrei Iancu
>>
>> OpenSIPS Founder and Developer
>>    https://www.opensips-solutions.com
>>    https://www.siphub.com
>> On 22.02.2024 21:43, Alexander Kogan wrote:
>>>
>>> Hi,
>>>
>>> The OpenSIPS process gets stack in infinite loop when the rtpengine 
>>> module runs out of memory in send_rtpe_command()
>>>
>>> Please review the following piece of code in rtpengine.c:
>>>
>>>     RTPE_START_READ();
>>>     do {
>>>         if (snode && snode->s) {
>>>             if ((node = get_rtpe_node(snode, set)) == NULL && op == 
>>> OP_OFFER)
>>>                 node = select_rtpe_node(ng_flags.call_id, 1, set);
>>>             snode = NULL;
>>>         } else {
>>>             node = select_rtpe_node(ng_flags.call_id, 1, set);
>>>         }
>>>         if (!node) {
>>>             LM_ERR("no available proxies\n");
>>>             RTPE_STOP_READ();
>>>             goto error;
>>>         }
>>>
>>>         cp = send_rtpe_command(node, ng_flags.dict, &ret);
>>>     } *while (cp == NULL);*
>>>     RTPE_STOP_READ();
>>>     LM_DBG("proxy reply: %.*s\n", ret, cp);
>>>
>>> When send_rtpe_command() returns NULL due to memory absence here:
>>>
>>>     v = bencode_iovec(dict, &vcnt, 1, 0);
>>>     if (!v) {
>>>         LM_ERR("error converting bencode to iovec\n");
>>>         return NULL;
>>>     }
>>>
>>> the mentioned loop ( *do {....} while(cp == NULL)* ) won't stop 
>>> indefinitely causing the opensips process to become stuck.
>>>
>>> Best regards,
>>> Alexander Kogan,
>>> Director of R&D
>>> 5g Future
>>> http://5gfuture.com
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20240226/4d6bba43/attachment-0001.html>


More information about the Users mailing list