mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Merge remote-tracking branch 'tor-gitlab/mr/412'
This commit is contained in:
commit
a9b287fbcc
4
changes/bug40435
Normal file
4
changes/bug40435
Normal file
@ -0,0 +1,4 @@
|
||||
o Minor bugfixes (circuit padding):
|
||||
- Don't send STOP circuit padding cells when the other side has already
|
||||
shut down the corresponding padding machine. Fixes bug 40435; bugfix on
|
||||
0.4.0.1-alpha.
|
@ -2967,6 +2967,8 @@ signed_error_t
|
||||
circpad_handle_padding_negotiate(circuit_t *circ, cell_t *cell)
|
||||
{
|
||||
int retval = 0;
|
||||
/* Should we send back a STOP cell? */
|
||||
bool respond_with_stop = true;
|
||||
circpad_negotiate_t *negotiate;
|
||||
|
||||
if (CIRCUIT_IS_ORIGIN(circ)) {
|
||||
@ -2992,6 +2994,12 @@ circpad_handle_padding_negotiate(circuit_t *circ, cell_t *cell)
|
||||
negotiate->machine_type, negotiate->machine_ctr);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* If we reached this point we received a STOP command from an old or
|
||||
unknown machine. Don't reply with our own STOP since there is no one to
|
||||
handle it on the other end */
|
||||
respond_with_stop = false;
|
||||
|
||||
if (negotiate->machine_ctr <= circ->padding_machine_ctr) {
|
||||
log_info(LD_CIRC, "Received STOP command for old machine %u, ctr %u",
|
||||
negotiate->machine_type, negotiate->machine_ctr);
|
||||
@ -3023,10 +3031,13 @@ circpad_handle_padding_negotiate(circuit_t *circ, cell_t *cell)
|
||||
retval = -1;
|
||||
|
||||
done:
|
||||
circpad_padding_negotiated(circ, negotiate->machine_type,
|
||||
negotiate->command,
|
||||
(retval == 0) ? CIRCPAD_RESPONSE_OK : CIRCPAD_RESPONSE_ERR,
|
||||
negotiate->machine_ctr);
|
||||
if (respond_with_stop) {
|
||||
circpad_padding_negotiated(circ, negotiate->machine_type,
|
||||
negotiate->command,
|
||||
(retval == 0) ? CIRCPAD_RESPONSE_OK : CIRCPAD_RESPONSE_ERR,
|
||||
negotiate->machine_ctr);
|
||||
}
|
||||
|
||||
circpad_negotiate_free(negotiate);
|
||||
|
||||
return retval;
|
||||
|
@ -1367,7 +1367,7 @@ test_circuitpadding_wronghop(void *arg)
|
||||
tt_ptr_op(client_side->padding_info[0], OP_NE, NULL);
|
||||
tt_ptr_op(relay_side->padding_machine[0], OP_NE, NULL);
|
||||
tt_ptr_op(relay_side->padding_info[0], OP_NE, NULL);
|
||||
tt_int_op(n_relay_cells, OP_EQ, 3);
|
||||
tt_int_op(n_relay_cells, OP_EQ, 2);
|
||||
tt_int_op(n_client_cells, OP_EQ, 2);
|
||||
|
||||
/* 6. Sending negotiated command to relay does nothing */
|
||||
@ -1396,11 +1396,9 @@ test_circuitpadding_wronghop(void *arg)
|
||||
/* verify no padding was negotiated */
|
||||
tt_ptr_op(relay_side->padding_machine[0], OP_EQ, NULL);
|
||||
tt_ptr_op(client_side->padding_machine[0], OP_EQ, NULL);
|
||||
tt_int_op(n_relay_cells, OP_EQ, 3);
|
||||
tt_int_op(n_client_cells, OP_EQ, 2);
|
||||
|
||||
/* verify no echo was sent */
|
||||
tt_int_op(n_relay_cells, OP_EQ, 3);
|
||||
tt_int_op(n_relay_cells, OP_EQ, 2);
|
||||
tt_int_op(n_client_cells, OP_EQ, 2);
|
||||
|
||||
/* Finish circuit */
|
||||
|
Loading…
Reference in New Issue
Block a user