Commit d235e523 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge branch 'ticket33290_v2_042' into maint-0.4.2

parents a692b87f 393bbd82
Loading
Loading
Loading
Loading

changes/ticket33290

0 → 100644
+4 −0
Original line number Diff line number Diff line
  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.
+6 −2
Original line number Diff line number Diff line
@@ -79,6 +79,8 @@
#include "core/or/destroy_cell_queue_st.h"
#include "core/or/or_circuit_st.h"

#include "lib/crypt_ops/crypto_util.h"

/*
 * Private typedefs for circuitmux.c
 */
@@ -973,7 +975,10 @@ circuitmux_detach_circuit,(circuitmux_t *cmux, circuit_t *circ))
    /* Now remove it from the map */
    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);
  }
}
@@ -1334,4 +1339,3 @@ circuitmux_compare_muxes, (circuitmux_t *cmux_1, circuitmux_t *cmux_2))
    return 0;
  }
}
+9 −3
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#include "core/or/circuitmux.h"
#include "core/or/circuitmux_ewma.h"
#include "lib/crypt_ops/crypto_rand.h"
#include "lib/crypt_ops/crypto_util.h"
#include "feature/nodelist/networkstatus.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;
  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);
  }
}
@@ -162,7 +165,9 @@ TO_EWMA_POL_CIRC_DATA(circuitmux_policy_circ_data_t *pol)
{
  if (!pol) return NULL;
  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);
  }
}
@@ -295,6 +300,7 @@ ewma_free_cmux_data(circuitmux_t *cmux,
  pol = TO_EWMA_POL_DATA(pol_data);

  smartlist_free(pol->active_circuit_pqueue);
  memwipe(pol, 0xda, sizeof(ewma_policy_data_t));
  tor_free(pol);
}

@@ -361,7 +367,7 @@ ewma_free_circ_data(circuitmux_t *cmux,
  if (!pol_circ_data) return;

  cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);

  memwipe(cdata, 0xdc, sizeof(ewma_policy_circ_data_t));
  tor_free(cdata);
}