Description

I found some failures in the stress test of MSRP messages and prompted the following error log:
DEBUG: msrp [msrp_netio.c:98]: msrp_relay(): To-Path has only one URI -- nowehere to forward;

After adding the log embedding point, it is found that there is a problem in the logic of adding the linked list of "_msrp_cmap_head - > cslots". The node with a smaller hash value will be added behind the node with a larger "citemid" value, so that the linked list is not arranged strictly in the ascending order of "citemid", resulting in the failure of subsequent queries such as "msrp_cmap_lookup", and thus the normal relay cannot be performed.
37(81) ERROR: msrp [msrp_cmap.c:291]: msrp_cmap_save(): _msrp_cmap_head->cslots[492932] item citemid is [2183628164], sessionid is [xxxxxxxx]
37(81) ERROR: msrp [msrp_cmap.c:291]: msrp_cmap_save(): _msrp_cmap_head->cslots[492932] item citemid is [2174190980], sessionid is [xxxxxxxx]
2183628164>2174190980, out of order.

Troubleshooting

source code:
for(itb=_msrp_cmap_head->cslots[idx].first; itb; itb=itb->next)
{
if(itb->citemid>it->citemid || itb->next==NULL) {
if(itb->next==NULL) {
itb->next=it;
it->prev = itb;
} else {
it->next = itb;
if(itb->prev==NULL) {
_msrp_cmap_head->cslots[idx].first = it;
} else {
itb->prev->next = it;
}
it->prev = itb->prev;
itb->prev = it;
}
break;
}
}

Reproduction

Debugging Data

(paste your debugging data here)

Log Messages

(paste your log messages here)

SIP Traffic

(paste your sip traffic here)

Possible Solutions

Additional Information

Tested against kamailio 5.4.x and actually all versions are affected`

fixed code:
for(itb=_msrp_cmap_head->cslots[idx].first; itb; itb=itb->next)
			{
				if(itb->citemid>it->citemid || itb->next==NULL) {
                                       //modifed code
					if(itb->next==NULL && (itb->citemid < it->citemid)) {
						itb->next=it;
						it->prev = itb;
					} else {
						it->next = itb;
						if(itb->prev==NULL) {
							_msrp_cmap_head->cslots[idx].first = it;
						} else {
							itb->prev->next = it;
						}
						it->prev = itb->prev;
						itb->prev = it;
					}
					break;
				}
			}
Ubuntu 16.04


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.Message ID: <kamailio/kamailio/issues/3215@github.com>