mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
Merge branch 'bug12191_squashed'
This commit is contained in:
commit
cfca2a6037
7
changes/bug12191
Normal file
7
changes/bug12191
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
o Minor bugfixes:
|
||||||
|
|
||||||
|
- We now drop CREATE cells for already-existent circuit IDs and
|
||||||
|
for zero-valued circuit IDs, regardless of other factors that
|
||||||
|
might otherwise have called for DESTROY cells. Fixes bug 12191;
|
||||||
|
bugfix on 0.0.8pre1.
|
||||||
|
|
@ -227,6 +227,34 @@ command_process_create_cell(cell_t *cell, channel_t *chan)
|
|||||||
(unsigned)cell->circ_id,
|
(unsigned)cell->circ_id,
|
||||||
U64_PRINTF_ARG(chan->global_identifier), chan);
|
U64_PRINTF_ARG(chan->global_identifier), chan);
|
||||||
|
|
||||||
|
/* We check for the conditions that would make us drop the cell before
|
||||||
|
* we check for the conditions that would make us send a DESTROY back,
|
||||||
|
* since those conditions would make a DESTROY nonsensical. */
|
||||||
|
if (cell->circ_id == 0) {
|
||||||
|
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
||||||
|
"Received a create cell (type %d) from %s with zero circID; "
|
||||||
|
" ignoring.", (int)cell->command,
|
||||||
|
channel_get_actual_remote_descr(chan));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (circuit_id_in_use_on_channel(cell->circ_id, chan)) {
|
||||||
|
const node_t *node = node_get_by_id(chan->identity_digest);
|
||||||
|
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
||||||
|
"Received CREATE cell (circID %u) for known circ. "
|
||||||
|
"Dropping (age %d).",
|
||||||
|
(unsigned)cell->circ_id,
|
||||||
|
(int)(time(NULL) - channel_when_created(chan)));
|
||||||
|
if (node) {
|
||||||
|
char *p = esc_for_log(node_get_platform(node));
|
||||||
|
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
||||||
|
"Details: router %s, platform %s.",
|
||||||
|
node_describe(node), p);
|
||||||
|
tor_free(p);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (we_are_hibernating()) {
|
if (we_are_hibernating()) {
|
||||||
log_info(LD_OR,
|
log_info(LD_OR,
|
||||||
"Received create cell but we're shutting down. Sending back "
|
"Received create cell but we're shutting down. Sending back "
|
||||||
@ -248,14 +276,6 @@ command_process_create_cell(cell_t *cell, channel_t *chan)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cell->circ_id == 0) {
|
|
||||||
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
|
||||||
"Received a create cell (type %d) from %s with zero circID; "
|
|
||||||
" ignoring.", (int)cell->command,
|
|
||||||
channel_get_actual_remote_descr(chan));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the high bit of the circuit ID is not as expected, close the
|
/* If the high bit of the circuit ID is not as expected, close the
|
||||||
* circ. */
|
* circ. */
|
||||||
if (chan->wide_circ_ids)
|
if (chan->wide_circ_ids)
|
||||||
@ -274,23 +294,6 @@ command_process_create_cell(cell_t *cell, channel_t *chan)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (circuit_id_in_use_on_channel(cell->circ_id, chan)) {
|
|
||||||
const node_t *node = node_get_by_id(chan->identity_digest);
|
|
||||||
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
|
||||||
"Received CREATE cell (circID %u) for known circ. "
|
|
||||||
"Dropping (age %d).",
|
|
||||||
(unsigned)cell->circ_id,
|
|
||||||
(int)(time(NULL) - channel_when_created(chan)));
|
|
||||||
if (node) {
|
|
||||||
char *p = esc_for_log(node_get_platform(node));
|
|
||||||
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
|
||||||
"Details: router %s, platform %s.",
|
|
||||||
node_describe(node), p);
|
|
||||||
tor_free(p);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
circ = or_circuit_new(cell->circ_id, chan);
|
circ = or_circuit_new(cell->circ_id, chan);
|
||||||
circ->base_.purpose = CIRCUIT_PURPOSE_OR;
|
circ->base_.purpose = CIRCUIT_PURPOSE_OR;
|
||||||
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_ONIONSKIN_PENDING);
|
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_ONIONSKIN_PENDING);
|
||||||
|
Loading…
Reference in New Issue
Block a user