Selaa lähdekoodia

Use siphash on channel/circuit-id map too

Fixes ticket 11750.
Nick Mathewson 10 vuotta sitten
vanhempi
commit
8127f4db30
2 muutettua tiedostoa jossa 13 lisäystä ja 1 poistoa
  1. 5 0
      changes/bug11750
  2. 8 1
      src/or/circuitlist.c

+ 5 - 0
changes/bug11750

@@ -0,0 +1,5 @@
+  o Minor features (security):
+    - Apply the secure SipHash-2-4 function to the hash table mapping
+      circuit IDs and channels to circuits. We missed this one when we
+      were converting all the other hash functions to use SipHash back
+      in 0.2.5.3-alpha. Resolves ticket 11750.

+ 8 - 1
src/or/circuitlist.c

@@ -76,7 +76,14 @@ chan_circid_entries_eq_(chan_circid_circuit_map_t *a,
 static INLINE unsigned int
 chan_circid_entry_hash_(chan_circid_circuit_map_t *a)
 {
-  return ((unsigned)a->circ_id) ^ (unsigned)(uintptr_t)(a->chan);
+  struct {
+    void *chan;
+    circid_t circid;
+  } s;
+  memset(&s, 0, sizeof(s));
+  s.chan = a->chan;
+  s.circid = a->circ_id;
+  return (unsigned) siphash24g(&s, sizeof(s));
 }
 
 /** Map from [chan,circid] to circuit. */