mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Avoid attempts to double-remove edge connections from the DNS resolver.
Also, avoid crashing when we attempt to double-remove an edge
connection from the DNS resolver: just log a bug warning instead.
Fixes bug 14129. Bugfix on 0d20fee2fb
, which was in 0.0.7rc1.
jowr found the bug. cypherpunks wrote the fix. I added the log
message and removed the assert.
This commit is contained in:
parent
dca902ceba
commit
905287415b
7
changes/bug14129
Normal file
7
changes/bug14129
Normal file
@ -0,0 +1,7 @@
|
||||
o Major bugfixes (exit node stability):
|
||||
|
||||
- Fix an assertion failure that could occur under high DNS load. Fixes
|
||||
bug 14129; bugfix on Tor 0.0.7rc1. Found by "jowr"; diagnosed and fixed
|
||||
by "cypherpunks".
|
||||
|
||||
|
@ -557,6 +557,8 @@ purge_expired_resolves(time_t now)
|
||||
/* Connections should only be pending if they have no socket. */
|
||||
tor_assert(!SOCKET_OK(pend->conn->base_.s));
|
||||
pendconn = pend->conn;
|
||||
/* Prevent double-remove */
|
||||
pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
|
||||
if (!pendconn->base_.marked_for_close) {
|
||||
connection_edge_end(pendconn, END_STREAM_REASON_TIMEOUT);
|
||||
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
|
||||
@ -1132,7 +1134,9 @@ connection_dns_remove(edge_connection_t *conn)
|
||||
return; /* more are pending */
|
||||
}
|
||||
}
|
||||
tor_assert(0); /* not reachable unless onlyconn not in pending list */
|
||||
log_warn(LD_BUG, "Connection (fd "TOR_SOCKET_T_FORMAT") was not waiting "
|
||||
"for a resolve of %s, but we tried to remove it.",
|
||||
conn->base_.s, escaped_safe_str(conn->base_.address));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user