Fix memory leak in bug 20716

newconn->address is strdup'ed twice when new_type == CONN_TYPE_AP
and conn->socket_family == AF_UNIX. Whilst here, juggle code to
make sure newconn->port is assigned from an initialised value in
the above case.
This commit is contained in:
overcaffeinated 2016-11-19 19:32:08 +00:00 committed by Nick Mathewson
parent 6c2174d44d
commit 3b6da3f90c
2 changed files with 10 additions and 4 deletions

3
changes/bug20716 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (client, memory leak):
- Fix a small memory leak when receiving AF_UNIX connections on
a SocksPort. Fixes bug 20716; bugfix on 0.2.6.3-alpha.

View File

@ -1497,16 +1497,19 @@ connection_handle_listener_read(connection_t *conn, int new_type)
/* remember the remote address */ /* remember the remote address */
tor_addr_copy(&newconn->addr, &addr); tor_addr_copy(&newconn->addr, &addr);
newconn->port = port; if (new_type == CONN_TYPE_AP && conn->socket_family == AF_UNIX) {
newconn->address = tor_dup_addr(&addr); newconn->port = 0;
newconn->address = tor_strdup(conn->address);
} else {
newconn->port = port;
newconn->address = tor_dup_addr(&addr);
}
if (new_type == CONN_TYPE_AP && conn->socket_family != AF_UNIX) { if (new_type == CONN_TYPE_AP && conn->socket_family != AF_UNIX) {
log_info(LD_NET, "New SOCKS connection opened from %s.", log_info(LD_NET, "New SOCKS connection opened from %s.",
fmt_and_decorate_addr(&addr)); fmt_and_decorate_addr(&addr));
} }
if (new_type == CONN_TYPE_AP && conn->socket_family == AF_UNIX) { if (new_type == CONN_TYPE_AP && conn->socket_family == AF_UNIX) {
newconn->port = 0;
newconn->address = tor_strdup(conn->address);
log_info(LD_NET, "New SOCKS AF_UNIX connection opened"); log_info(LD_NET, "New SOCKS AF_UNIX connection opened");
} }
if (new_type == CONN_TYPE_CONTROL) { if (new_type == CONN_TYPE_CONTROL) {