|
@@ -418,9 +418,15 @@ circuit_n_conn_done(connection_t *or_conn, int status)
|
|
|
tor_assert(circ->state == CIRCUIT_STATE_OR_WAIT);
|
|
|
if (!circ->n_conn &&
|
|
|
circ->n_addr == or_conn->addr &&
|
|
|
- circ->n_port == or_conn->port &&
|
|
|
- !memcmp(or_conn->identity_digest, circ->n_conn_id_digest,
|
|
|
- DIGEST_LEN)) {
|
|
|
+ circ->n_port == or_conn->port) {
|
|
|
+ if (memcmp(or_conn->identity_digest, circ->n_conn_id_digest,
|
|
|
+ DIGEST_LEN)) {
|
|
|
+ log_fn(LOG_PROTOCOL_WARN, LD_CIRC,
|
|
|
+ "Pending circuit to %s:%d is intended for different digest!",
|
|
|
+ or_conn->address, or_conn->port);
|
|
|
+ circuit_mark_for_close(circ, END_CIRC_REASON_OR_IDENTITY);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (!status) { /* or_conn failed; close circ */
|
|
|
log_info(LD_CIRC,"or_conn failed. Closing circ.");
|
|
|
circuit_mark_for_close(circ, END_CIRC_REASON_OR_CONN_CLOSED);
|