mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Merge branch 'ticket33290_v2_041' into ticket33290_v2_042
This commit is contained in:
commit
fd1686c7d8
4
changes/ticket33290
Normal file
4
changes/ticket33290
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
o Minor features (diagnostic):
|
||||||
|
- Improve assertions and add some memory-poisoning code to try to track
|
||||||
|
down possible causes of a rare crash (32564) in the EWMA code.
|
||||||
|
Closes ticket 33290.
|
@ -79,6 +79,8 @@
|
|||||||
#include "core/or/destroy_cell_queue_st.h"
|
#include "core/or/destroy_cell_queue_st.h"
|
||||||
#include "core/or/or_circuit_st.h"
|
#include "core/or/or_circuit_st.h"
|
||||||
|
|
||||||
|
#include "lib/crypt_ops/crypto_util.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Private typedefs for circuitmux.c
|
* Private typedefs for circuitmux.c
|
||||||
*/
|
*/
|
||||||
@ -973,7 +975,10 @@ circuitmux_detach_circuit,(circuitmux_t *cmux, circuit_t *circ))
|
|||||||
/* Now remove it from the map */
|
/* Now remove it from the map */
|
||||||
HT_REMOVE(chanid_circid_muxinfo_map, cmux->chanid_circid_map, hashent);
|
HT_REMOVE(chanid_circid_muxinfo_map, cmux->chanid_circid_map, hashent);
|
||||||
|
|
||||||
/* Free the hash entry */
|
/* Wipe and free the hash entry */
|
||||||
|
// This isn't sensitive, but we want to be sure to know if we're accessing
|
||||||
|
// this accidentally.
|
||||||
|
memwipe(hashent, 0xef, sizeof(hashent));
|
||||||
tor_free(hashent);
|
tor_free(hashent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1334,4 +1339,3 @@ circuitmux_compare_muxes, (circuitmux_t *cmux_1, circuitmux_t *cmux_2))
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include "core/or/circuitmux.h"
|
#include "core/or/circuitmux.h"
|
||||||
#include "core/or/circuitmux_ewma.h"
|
#include "core/or/circuitmux_ewma.h"
|
||||||
#include "lib/crypt_ops/crypto_rand.h"
|
#include "lib/crypt_ops/crypto_rand.h"
|
||||||
|
#include "lib/crypt_ops/crypto_util.h"
|
||||||
#include "feature/nodelist/networkstatus.h"
|
#include "feature/nodelist/networkstatus.h"
|
||||||
#include "app/config/or_options_st.h"
|
#include "app/config/or_options_st.h"
|
||||||
|
|
||||||
@ -147,7 +148,9 @@ TO_EWMA_POL_DATA(circuitmux_policy_data_t *pol)
|
|||||||
{
|
{
|
||||||
if (!pol) return NULL;
|
if (!pol) return NULL;
|
||||||
else {
|
else {
|
||||||
tor_assert(pol->magic == EWMA_POL_DATA_MAGIC);
|
tor_assertf(pol->magic == EWMA_POL_DATA_MAGIC,
|
||||||
|
"Mismatch: %"PRIu32" != %"PRIu32,
|
||||||
|
pol->magic, EWMA_POL_DATA_MAGIC);
|
||||||
return DOWNCAST(ewma_policy_data_t, pol);
|
return DOWNCAST(ewma_policy_data_t, pol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,7 +165,9 @@ TO_EWMA_POL_CIRC_DATA(circuitmux_policy_circ_data_t *pol)
|
|||||||
{
|
{
|
||||||
if (!pol) return NULL;
|
if (!pol) return NULL;
|
||||||
else {
|
else {
|
||||||
tor_assert(pol->magic == EWMA_POL_CIRC_DATA_MAGIC);
|
tor_assertf(pol->magic == EWMA_POL_CIRC_DATA_MAGIC,
|
||||||
|
"Mismatch: %"PRIu32" != %"PRIu32,
|
||||||
|
pol->magic, EWMA_POL_CIRC_DATA_MAGIC);
|
||||||
return DOWNCAST(ewma_policy_circ_data_t, pol);
|
return DOWNCAST(ewma_policy_circ_data_t, pol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -295,6 +300,7 @@ ewma_free_cmux_data(circuitmux_t *cmux,
|
|||||||
pol = TO_EWMA_POL_DATA(pol_data);
|
pol = TO_EWMA_POL_DATA(pol_data);
|
||||||
|
|
||||||
smartlist_free(pol->active_circuit_pqueue);
|
smartlist_free(pol->active_circuit_pqueue);
|
||||||
|
memwipe(pol, 0xda, sizeof(ewma_policy_data_t));
|
||||||
tor_free(pol);
|
tor_free(pol);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,7 +367,7 @@ ewma_free_circ_data(circuitmux_t *cmux,
|
|||||||
if (!pol_circ_data) return;
|
if (!pol_circ_data) return;
|
||||||
|
|
||||||
cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
|
cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
|
||||||
|
memwipe(cdata, 0xdc, sizeof(ewma_policy_circ_data_t));
|
||||||
tor_free(cdata);
|
tor_free(cdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user