angler-fishThe Vulnerability History Project

inetpeer: get rid of ip_id_count

      Ideally, we would need to generate IP ID using a per destination IP
generator.

linux kernels used inet_peer cache for this purpose, but this had a huge
cost on servers disabling MTU discovery.

1) each inet_peer struct consumes 192 bytes

2) inetpeer cache uses a binary tree of inet_peer structs,
   with a nominal size of ~66000 elements under load.

3) lookups in this tree are hitting a lot of cache lines, as tree depth
   is about 20.

4) If server deals with many tcp flows, we have a high probability of
   not finding the inet_peer, allocating a fresh one, inserting it in
   the tree with same initial ip_id_count, (cf secure_ip_id())

5) We garbage collect inet_peer aggressively.

IP ID generation do not have to be 'perfect'

Goal is trying to avoid duplicates in a short period of time,
so that reassembly units have a chance to complete reassembly of
fragments belonging to one message before receiving other fragments
with a recycled ID.

We simply u
    
commit 73f156a6e8c1074ac6327e0abd1169e95eb66463
+1 -1
+3 -20
+23 -17
-2
-2
-25
+2 -2
-18
+3 -4
+1 -1
+1 -1
+1 -1
+16 -29
+1 -1
+12
-30
+1 -1
expand_less