mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Add a bunch of paranoid-mode expensive asserts incircuitmux.c
This commit is contained in:
+50
-2
@@ -126,6 +126,17 @@ struct chanid_circid_muxinfo_t {
|
||||
circuit_muxinfo_t muxinfo;
|
||||
};
|
||||
|
||||
/*
|
||||
* Internal-use #defines
|
||||
*/
|
||||
|
||||
#ifdef CMUX_PARANOIA
|
||||
#define circuitmux_assert_okay_paranoid(cmux) \
|
||||
circuitmux_assert_okay(cmux)
|
||||
#else
|
||||
#define circuitmux_assert_okay_paranoid(cmux)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Static function declarations
|
||||
*/
|
||||
@@ -176,6 +187,8 @@ circuitmux_move_active_circ_to_tail(circuitmux_t *cmux, circuit_t *circ,
|
||||
tor_assert(cmux);
|
||||
tor_assert(circ);
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
|
||||
/* Figure out our next_p and prev_p for this cmux/direction */
|
||||
if (direction) {
|
||||
if (direction == CELL_DIRECTION_OUT) {
|
||||
@@ -229,6 +242,8 @@ circuitmux_move_active_circ_to_tail(circuitmux_t *cmux, circuit_t *circ,
|
||||
*prev_p = cmux->active_circuits_tail;
|
||||
/* Set the tail to this circuit */
|
||||
cmux->active_circuits_tail = circ;
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
}
|
||||
|
||||
static INLINE circuit_t **
|
||||
@@ -324,6 +339,7 @@ circuitmux_detach_all_circuits(circuitmux_t *cmux)
|
||||
circuit_t *circ = NULL;
|
||||
|
||||
tor_assert(cmux);
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
|
||||
i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
|
||||
while (i) {
|
||||
@@ -794,6 +810,7 @@ circuitmux_attach_circuit(circuitmux_t *cmux, circuit_t *circ,
|
||||
tor_assert(circ);
|
||||
tor_assert(direction == CELL_DIRECTION_IN ||
|
||||
direction == CELL_DIRECTION_OUT);
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
|
||||
/*
|
||||
* Figure out which channel we're using, and get the circuit's current
|
||||
@@ -919,6 +936,8 @@ circuitmux_attach_circuit(circuitmux_t *cmux, circuit_t *circ,
|
||||
}
|
||||
cmux->n_cells += cell_count;
|
||||
}
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -940,6 +959,7 @@ circuitmux_detach_circuit(circuitmux_t *cmux, circuit_t *circ)
|
||||
tor_assert(cmux->chanid_circid_map);
|
||||
tor_assert(circ);
|
||||
tor_assert(circ->n_chan);
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
|
||||
/* See if we have it for n_chan/n_circ_id */
|
||||
search.chan_id = circ->n_chan->global_identifier;
|
||||
@@ -995,6 +1015,8 @@ circuitmux_detach_circuit(circuitmux_t *cmux, circuit_t *circ)
|
||||
/* Free the hash entry */
|
||||
tor_free(hashent);
|
||||
}
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1017,6 +1039,11 @@ circuitmux_make_circuit_active(circuitmux_t *cmux, circuit_t *circ,
|
||||
tor_assert(circ);
|
||||
tor_assert(direction == CELL_DIRECTION_OUT ||
|
||||
direction == CELL_DIRECTION_IN);
|
||||
/*
|
||||
* Don't circuitmux_assert_okay_paranoid(cmux) here because the cell count
|
||||
* already got changed and we have to update the list for it to be consistent
|
||||
* again.
|
||||
*/
|
||||
|
||||
/* Get the right set of active list links for this direction */
|
||||
if (direction == CELL_DIRECTION_OUT) {
|
||||
@@ -1084,6 +1111,8 @@ circuitmux_make_circuit_active(circuitmux_t *cmux, circuit_t *circ,
|
||||
cmux->policy->notify_circ_active(cmux, cmux->policy_data,
|
||||
circ, hashent->muxinfo.policy_data);
|
||||
}
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1107,6 +1136,11 @@ circuitmux_make_circuit_inactive(circuitmux_t *cmux, circuit_t *circ,
|
||||
tor_assert(circ);
|
||||
tor_assert(direction == CELL_DIRECTION_OUT ||
|
||||
direction == CELL_DIRECTION_IN);
|
||||
/*
|
||||
* Don't circuitmux_assert_okay_paranoid(cmux) here because the cell count
|
||||
* already got changed and we have to update the list for it to be consistent
|
||||
* again.
|
||||
*/
|
||||
|
||||
/* Get the right set of active list links for this direction */
|
||||
if (direction == CELL_DIRECTION_OUT) {
|
||||
@@ -1191,6 +1225,8 @@ circuitmux_make_circuit_inactive(circuitmux_t *cmux, circuit_t *circ,
|
||||
cmux->policy->notify_circ_inactive(cmux, cmux->policy_data,
|
||||
circ, hashent->muxinfo.policy_data);
|
||||
}
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1217,6 +1253,8 @@ circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
|
||||
tor_assert(cmux);
|
||||
tor_assert(circ);
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
|
||||
/* Search for this circuit's entry */
|
||||
hashent = circuitmux_find_map_entry(cmux, circ);
|
||||
/* Assert that we found one */
|
||||
@@ -1242,15 +1280,22 @@ circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
|
||||
*/
|
||||
if (hashent->muxinfo.cell_count > 0 && n_cells == 0) {
|
||||
--(cmux->n_active_circuits);
|
||||
hashent->muxinfo.cell_count = n_cells;
|
||||
circuitmux_make_circuit_inactive(cmux, circ, hashent->muxinfo.direction);
|
||||
/* Is the old cell count == 0 and the new cell count > 0 ? */
|
||||
} else if (hashent->muxinfo.cell_count == 0 && n_cells > 0) {
|
||||
++(cmux->n_active_circuits);
|
||||
hashent->muxinfo.cell_count = n_cells;
|
||||
circuitmux_make_circuit_active(cmux, circ, hashent->muxinfo.direction);
|
||||
} else {
|
||||
/*
|
||||
* Update the entry cell count like this so we can put a
|
||||
* circuitmux_assert_okay_paranoid inside make_circuit_(in)active() too.
|
||||
*/
|
||||
hashent->muxinfo.cell_count = n_cells;
|
||||
}
|
||||
|
||||
/* Update hash entry cell counter */
|
||||
hashent->muxinfo.cell_count = n_cells;
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1301,6 +1346,7 @@ circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
|
||||
|
||||
tor_assert(cmux);
|
||||
tor_assert(circ);
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
|
||||
if (n_cells == 0) return;
|
||||
|
||||
@@ -1351,6 +1397,8 @@ circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
|
||||
--(cmux->n_active_circuits);
|
||||
circuitmux_make_circuit_inactive(cmux, circ, hashent->muxinfo.direction);
|
||||
}
|
||||
|
||||
circuitmux_assert_okay_paranoid(cmux);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user