diff options
author | David Goulet <dgoulet@torproject.org> | 2018-01-30 09:33:12 -0500 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2018-01-30 09:33:12 -0500 |
commit | cd81403cc0d73d53cb7f3650b38d49c54100af25 (patch) | |
tree | 5ea4f0c626ad082fb195a478614f67dff1a7b386 /src/or/command.c | |
parent | 03ab24b44cd148263cfb2b801cba35489e3852c1 (diff) | |
parent | 9aca7d47306222f2870ec16a7291a8215d6c3316 (diff) | |
download | tor-cd81403cc0d73d53cb7f3650b38d49c54100af25.tar.gz tor-cd81403cc0d73d53cb7f3650b38d49c54100af25.zip |
Merge branch 'ticket24902_029_05' into ticket24902_033_02
Diffstat (limited to 'src/or/command.c')
-rw-r--r-- | src/or/command.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/or/command.c b/src/or/command.c index bd70e37a07..185596a65a 100644 --- a/src/or/command.c +++ b/src/or/command.c @@ -46,6 +46,7 @@ #include "config.h" #include "control.h" #include "cpuworker.h" +#include "dos.h" #include "hibernate.h" #include "nodelist.h" #include "onion.h" @@ -247,6 +248,11 @@ command_process_create_cell(cell_t *cell, channel_t *chan) (unsigned)cell->circ_id, U64_PRINTF_ARG(chan->global_identifier), chan); + /* First thing we do, even though the cell might be invalid, is inform the + * DoS mitigation subsystem layer of this event. Validation is done by this + * function. */ + dos_cc_new_create_cell(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. */ @@ -284,6 +290,13 @@ command_process_create_cell(cell_t *cell, channel_t *chan) return; } + /* Check if we should apply a defense for this channel. */ + if (dos_cc_get_defense_type(chan) == DOS_CC_DEFENSE_REFUSE_CELL) { + channel_send_destroy(cell->circ_id, chan, + END_CIRC_REASON_RESOURCELIMIT); + return; + } + if (!server_mode(options) || (!public_server_mode(options) && channel_is_outgoing(chan))) { log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, |