From: Stefan Fritsch Date: Mon, 7 Nov 2011 20:57:02 +0000 (+0000) Subject: Only init the RNG once at startup. This saves some entropy and works around the APR bug X-Git-Tag: 2.3.15~42 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b791885badd4b252a60a6eaa5fc7d12ceb833e93;p=apache Only init the RNG once at startup. This saves some entropy and works around the APR bug fixed in r1198921 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1198930 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/mod_core.h b/include/mod_core.h index 8e822d9b20..5d8b83c14c 100644 --- a/include/mod_core.h +++ b/include/mod_core.h @@ -90,6 +90,8 @@ AP_DECLARE(int) ap_send_http_options(request_rec *r); /* Used for multipart/byteranges boundary string */ extern AP_DECLARE_DATA const char *ap_multipart_boundary; +/* Init RNG at startup */ +AP_CORE_DECLARE(void) ap_init_rng(apr_pool_t *p); /* Update RNG state in parent after fork */ AP_CORE_DECLARE(void) ap_random_parent_after_fork(void); diff --git a/server/core.c b/server/core.c index 56e48d3215..d5eadf3c90 100644 --- a/server/core.c +++ b/server/core.c @@ -4632,7 +4632,7 @@ AP_CORE_DECLARE(void) ap_random_parent_after_fork(void) apr_random_insecure_bytes(rng, &data, sizeof(data)); } -static void rng_init(apr_pool_t *p) +AP_CORE_DECLARE(void) ap_init_rng(apr_pool_t *p) { unsigned char seed[8]; apr_status_t rv; @@ -4741,7 +4741,6 @@ static void register_hooks(apr_pool_t *p) ap_register_log_hooks(p); ap_register_config_hooks(p); ap_expr_init(p); - rng_init(p); /* create_connection and pre_connection should always be hooked * APR_HOOK_REALLY_LAST by core to give other modules the opportunity diff --git a/server/main.c b/server/main.c index 70e698b428..6c2685dbee 100644 --- a/server/main.c +++ b/server/main.c @@ -34,6 +34,7 @@ #include "http_log.h" #include "http_config.h" #include "http_core.h" +#include "mod_core.h" #include "http_request.h" #include "http_vhost.h" #include "apr_uri.h" @@ -459,6 +460,7 @@ int main(int argc, const char * const argv[]) ap_pglobal = process->pool; pconf = process->pconf; ap_server_argv0 = process->short_name; + ap_init_rng(ap_pglobal); /* Set up the OOM callback in the global pool, so all pools should * by default inherit it. */