[SR-Users] [sr-dev] TCP replace alias can cause core

Andrei Pelinescu-Onciul andrei at iptel.org
Wed Oct 10 10:20:16 CEST 2012


On Oct 01, 2012 at 14:19, Jijo <realjijo at gmail.com> wrote:
> We found a problem regarding TCP connection alias in the following code at
> tcp_main.c:
> 
> 
[...]
> 
> As TCP_ALIAS_REPLACE flag is set for the default TCP options value, in the
> function _tcpconn_add_alias_unsafe() a TCP connection alias can be moved
> from connection A to connection B based on the TCP alias hash. In this
> case, the number of aliases is incremented in the connection A, and
> decremented from connection B. However, in the connection B the number of
> aliases can reach zero (no alias). And the code above can be executed for
> connection B setting the number of aliases to 1 unconditionally. When this
> case happens, the connection B keeps an invalid alias (already excluded
> from connection B by tcpconn_add_alias_unsafe() function called from
> connection A). When the connection A is released, the aliases are also
> released, and this memory area can be filled with different data. As
> connection B has references to an invalid alias it can try to access
> invalid areas, and can crash Kamailio. This access happens, for example,
> when another alias is added to connection B.
> 
> To fix it we include a check before the code:
> 
>                                                 if (c->aliases>0) {

Thanks a lot, I've commited the fix.
The only difference is that  I changed  if (c->aliases>0) into  if
(c->aliases > 1).

Andrei



More information about the sr-users mailing list