summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-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 &&