Export to GitHub

rfc5766-turn-server - issue #99

infinite loop from newid conflict.


Posted on Feb 13, 2014 by Quick Kangaroo

infinite loop from newid conflict.

Because newid is not generated again. (version Citrix-3.1.1.0 'Arch Lector')

Thread 10 (Thread 0x7fa077f5d700 (LWP 24843)):

0 0x00007fa0898f0533 in kh_get_3 (key=396321632, h=0x7fa06c0368b0) at src/server/ns_turn_maps.c:37

1 kh_get_3 (key=396321632, h=0x7fa06c0368b0) at src/server/ns_turn_maps.c:107

2 ur_map_get (map=<optimized out>, key=<optimized out>, value=0x0) at src/server/ns_turn_maps.c:113

3 0x00007fa0898eee1b in set_new_tc_id (tc=0x7fa06c64a6e0, server_id=<optimized out>) at src/server/ns_turn_allocation.c:379

4 create_tcp_connection (server_id=<optimized out>, a=<optimized out>, tid=<optimized out>, peer_addr=<optimized out>,

err_code=&lt;optimized out&gt;) at src/server/ns_turn_allocation.c:402

5 0x00007fa0898f3fd6 in tcp_peer_accept_connection (s=0x7fa06c604ce0, arg=0x7fa06c6d9280) at src/server/ns_turn_server.c:1628

6 0x00007fa0898d317e in tcp_listener_input_handler (l=<optimized out>, fd=16887, sa=<optimized out>, socklen=<optimized out>,

arg=0x7fa06c890080) at src/apps/relay/ns_ioalib_engine_impl.c:1062

7 0x00007fa088e587f4 in ?? () from /usr/lib/libevent_core-2.0.so.5

8 0x00007fa088e4c2fc in event_base_loop () from /usr/lib/libevent_core-2.0.so.5

9 0x00007fa0898d8e6e in run_events (eb=0x7fa06c0248b0) at src/apps/relay/netengine.c:1104

10 0x00007fa0898d8ed1 in run_general_relay_thread (arg=0x7fa08ad87310) at src/apps/relay/netengine.c:1209

11 0x00007fa087ea6e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0

12 0x00007fa087bd33fd in clone () from /lib/x86_64-linux-gnu/libc.so.6

13 0x0000000000000000 in ?? ()

diff --git a/src/server/ns_turn_allocation.c b/src/server/ns_turn_allocation.c index 4864a4e..d081683 100644 --- a/src/server/ns_turn_allocation.c +++ b/src/server/ns_turn_allocation.c @@ -482,10 +482,11 @@ void ch_map_clean(ch_map* map) static void set_new_tc_id(u08bits server_id, tcp_connection *tc) { allocation a = (allocation)(tc->owner); ur_map *map = a->tcp_connections; - u32bits newid = 0; + u32bits newid; u32bits sid = server_id; sid = sid<<24; do { + newid = 0; while (!newid) { newid = (u32bits)random(); if(!newid) {

Comment #1

Posted on Feb 13, 2014 by Happy Giraffe

Thanks a lot for reporting and suggesting a fix. It will be included into 3.2.2.7 maintenance release, to be issued in a week.

Comment #2

Posted on Feb 14, 2014 by Happy Giraffe

Fixed in 3.2.2.7

Status: Fixed

Labels:
Type-Defect Priority-Medium