]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Explicitly reinit libevent PRNG on fork
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 11 Sep 2016 21:03:57 +0000 (22:03 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 11 Sep 2016 21:04:21 +0000 (22:04 +0100)
config.h.in
src/libserver/worker_util.c

index 8ebb2e56d4470b2dcb2ff9c300632312590036b7..90edc11328e3133a60803fe4dd2f557149a3f4d4 100644 (file)
@@ -39,6 +39,7 @@
 #cmakedefine HAVE_INTTYPES_H     1
 #cmakedefine HAVE_IPV6_V6ONLY    1
 #cmakedefine HAVE_LIBAIO_H       1
+#cmakedefine HAVE_LIBEVENT2      1
 #cmakedefine HAVE_LIBGEN_H       1
 #cmakedefine HAVE_LIBUTIL_H      1
 #cmakedefine HAVE_LOCALE_H       1
 
 #cmakedefine DISABLE_PTHREAD_MUTEX 1
 
+#ifdef HAVE_LIBEVENT2
+#define HAVE_EVUTIL_RNG_INIT 1
+#endif
+
 /* Detect endiannes */
 
 #ifdef HAVE_ENDIAN_H
index 4043f79a3063f388ae3512d8b6493b43edb8c748..80fec531ca44a4cfcac780de1640fbfc274a48b3 100644 (file)
@@ -544,19 +544,24 @@ rspamd_fork_worker (struct rspamd_main *rspamd_main,
        case 0:
                /* Update pid for logging */
                rspamd_log_update_pid (cf->type, rspamd_main->logger);
-               /* Remove the inherited event base */
-               event_reinit (rspamd_main->ev_base);
-               event_base_free (rspamd_main->ev_base);
-               /* Lock statfile pool if possible XXX */
+
                /* Init PRNG after fork */
                rc = ottery_init (rspamd_main->cfg->libs_ctx->ottery_cfg);
-               rspamd_random_seed_fast ();
                if (rc != OTTERY_ERR_NONE) {
                        msg_err_main ("cannot initialize PRNG: %d", rc);
                        g_assert (0);
                }
 
+               rspamd_random_seed_fast ();
                g_random_set_seed (ottery_rand_uint32 ());
+#ifdef HAVE_EVUTIL_RNG_INIT
+               evutil_secure_rng_init ();
+#endif
+
+               /* Remove the inherited event base */
+               event_reinit (rspamd_main->ev_base);
+               event_base_free (rspamd_main->ev_base);
+
                /* Drop privilleges */
                rspamd_worker_drop_priv (rspamd_main);
                /* Set limits */