diff options
author | Roger Dingledine <arma@torproject.org> | 2012-07-01 05:32:37 -0400 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2012-07-01 05:32:37 -0400 |
commit | 6061cd584c129eb8b5ed24fb5ce686a0236913e4 (patch) | |
tree | cc88fa612f14f9fe667950fa552e4dfadd064b8f /src/or | |
parent | ed2601f2be0978c37c0ae086b2a8d2f7d94078fc (diff) | |
parent | c32ec9c425e9539bcc8ede95612e2d331c2cc2dd (diff) | |
download | tor-6061cd584c129eb8b5ed24fb5ce686a0236913e4.tar tor-6061cd584c129eb8b5ed24fb5ce686a0236913e4.tar.gz |
Merge branch 'maint-0.2.3'
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/relay.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/or/relay.c b/src/or/relay.c index 3f894bfe1..4ab440384 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -1265,11 +1265,25 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, case RELAY_COMMAND_SENDME: if (!conn) { if (layer_hint) { + if (layer_hint->package_window + CIRCWINDOW_INCREMENT > + CIRCWINDOW_START_MAX) { + log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, + "Bug/attack: unexpected sendme cell from exit relay. " + "Closing circ."); + return -END_CIRC_REASON_TORPROTOCOL; + } layer_hint->package_window += CIRCWINDOW_INCREMENT; log_debug(LD_APP,"circ-level sendme at origin, packagewindow %d.", layer_hint->package_window); circuit_resume_edge_reading(circ, layer_hint); } else { + if (circ->package_window + CIRCWINDOW_INCREMENT > + CIRCWINDOW_START_MAX) { + log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, + "Bug/attack: unexpected sendme cell from client. " + "Closing circ."); + return -END_CIRC_REASON_TORPROTOCOL; + } circ->package_window += CIRCWINDOW_INCREMENT; log_debug(LD_APP, "circ-level sendme at non-origin, packagewindow %d.", |