summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2019-08-05 13:47:07 +0300
committerGeorge Kadianakis <desnacked@riseup.net>2019-08-05 13:48:58 +0300
commit74c059596527af67f5df38847e86179852bc7005 (patch)
tree2613251915a71224ac1f1f2b647e53998c40d19c /src
parent1d6054f75065214c55d17796cf1587692fbb5cea (diff)
downloadtor-74c059596527af67f5df38847e86179852bc7005.tar.gz
tor-74c059596527af67f5df38847e86179852bc7005.zip
Ignore regular cells in padding circuits.
Padding circuits were regular cells that got closed before their padding machine could finish. This means that they can still receive regular cells from their past life, but they have no way or reason to answer them anymore. Hence let's ignore them before they even get to the proper subsystems.
Diffstat (limited to 'src')
-rw-r--r--src/core/or/relay.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/or/relay.c b/src/core/or/relay.c
index 9f90a09699..9e691a02b5 100644
--- a/src/core/or/relay.c
+++ b/src/core/or/relay.c
@@ -1663,6 +1663,17 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
if (circpad_handle_padding_negotiated(circ, cell, layer_hint) == 0)
circuit_read_valid_data(TO_ORIGIN_CIRCUIT(circ), rh.length);
return 0;
+ }
+
+ /* If this is a padding circuit we don't need to parse any other commands
+ * than the padding ones. Just drop them to the floor. */
+ if (circ->purpose == CIRCUIT_PURPOSE_C_CIRCUIT_PADDING) {
+ log_info(domain, "Ignored cell (%d) that arrived in padding circuit.",
+ rh.command);
+ return 0;
+ }
+
+ switch (rh.command) {
case RELAY_COMMAND_BEGIN:
case RELAY_COMMAND_BEGIN_DIR:
if (layer_hint &&