mirror of
https://github.com/haproxy/haproxy.git
synced 2026-05-26 11:20:51 -04:00
Consuming randoms in pairs directly exposes the internal PRNG's state on moderately idle system. It can allow to predict next (or previous) UUIDs, QUIC retry tokens, and WS keys for example. Let's insert an XXH64 call on the ha_random64() output to avoid this. We expand the boot seed as the secret at boot, and use now_ns as the seed for each call. The original ha_random64() function was renamed to ha_random64_internal() for use cases where it's not a problem to directly use the internal state. The performance loss is only measurable when single-threaded. It drops from 7.32M UUID per second to 7.16M. Above that there is no longer any difference due to the DWCAS loop which reaches up to 98.5% CPU at 20 threads. This will need to be backported to stable releases after a period of observation. |
||
|---|---|---|
| .. | ||
| haproxy | ||
| import | ||
| make | ||