From 92f20993f94c91ad03213c5fcc2984ee3b487a67 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 15 Mar 2021 20:19:48 +0000 Subject: [Minor] Automatically init xoroshifto PRG --- src/libutil/util.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/libutil') diff --git a/src/libutil/util.c b/src/libutil/util.c index 47856f716..49d61e87e 100644 --- a/src/libutil/util.c +++ b/src/libutil/util.c @@ -1766,7 +1766,19 @@ rspamd_random_double (void) } -static guint64 xorshifto_seed[4]; +static guint64* +xorshifto_seed (void) +{ + static guint64 xorshifto_seed[4]; + static bool initialized = false; + + if (G_UNLIKELY(!initialized)) { + ottery_rand_bytes((void *)xorshifto_seed, sizeof (xorshifto_seed)); + initialized = true; + } + + return xorshifto_seed; +} static inline guint64 xoroshiro_rotl (const guint64 x, int k) { @@ -1776,7 +1788,7 @@ xoroshiro_rotl (const guint64 x, int k) { gdouble rspamd_random_double_fast (void) { - return rspamd_random_double_fast_seed (xorshifto_seed); + return rspamd_random_double_fast_seed (xorshifto_seed()); } /* xoshiro256+ */ @@ -1822,13 +1834,13 @@ rspamd_random_uint64_fast_seed (guint64 seed[4]) guint64 rspamd_random_uint64_fast (void) { - return rspamd_random_uint64_fast_seed (xorshifto_seed); + return rspamd_random_uint64_fast_seed (xorshifto_seed()); } void rspamd_random_seed_fast (void) { - ottery_rand_bytes (xorshifto_seed, sizeof (xorshifto_seed)); + (void)xorshifto_seed(); } gdouble -- cgit v1.2.3