Explorar o código

Use siphash on channel/circuit-id map too

Fixes ticket 11750.
Nick Mathewson %!s(int64=10) %!d(string=hai) anos
pai
achega
8127f4db30
Modificáronse 2 ficheiros con 13 adicións e 1 borrados
  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. */