|
@@ -443,10 +443,22 @@ command_process_relay_cell(cell_t *cell, channel_t *chan)
|
|
|
* gotten no more than MAX_RELAY_EARLY_CELLS_PER_CIRCUIT of them. */
|
|
|
if (cell->command == CELL_RELAY_EARLY) {
|
|
|
if (direction == CELL_DIRECTION_IN) {
|
|
|
-
|
|
|
- * for hidden service compatibility. There isn't any way to make
|
|
|
- * a long circuit through inbound relay_early cells anyway. See
|
|
|
- * bug 1038. -RD */
|
|
|
+
|
|
|
+ * bug 1038; but relays running versions before 0.2.1.19 are long
|
|
|
+ * gone from the network, so any such cells now are surprising. */
|
|
|
+ log_warn(LD_OR,
|
|
|
+ "Received an inbound RELAY_EARLY cell on circuit %u."
|
|
|
+ " Closing circuit. Please report this event,"
|
|
|
+ " along with the following message.",
|
|
|
+ (unsigned)cell->circ_id);
|
|
|
+ if (CIRCUIT_IS_ORIGIN(circ)) {
|
|
|
+ circuit_log_path(LOG_WARN, LD_OR, TO_ORIGIN_CIRCUIT(circ));
|
|
|
+ } else if (circ->n_chan) {
|
|
|
+ log_warn(LD_OR, " upstream=%s",
|
|
|
+ channel_get_actual_remote_descr(circ->n_chan));
|
|
|
+ }
|
|
|
+ circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
|
|
|
+ return;
|
|
|
} else {
|
|
|
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
|
|
|
if (or_circ->remaining_relay_early_cells == 0) {
|