]> git.kaiwu.me - nginx.git/commitdiff
Always seed PRNG with PID, seconds, and milliseconds.
authorRuslan Ermilov <ru@nginx.com>
Thu, 4 Aug 2016 20:43:10 +0000 (23:43 +0300)
committerRuslan Ermilov <ru@nginx.com>
Thu, 4 Aug 2016 20:43:10 +0000 (23:43 +0300)
src/os/unix/ngx_posix_init.c
src/os/unix/ngx_process_cycle.c
src/os/win32/ngx_process_cycle.c
src/os/win32/ngx_win32_init.c

index 76ed94e90a58c4c2810ae2f594c1c8fa979d2c9b..7e6e79d013b95341c859d04a1e8f171cb482b7df 100644 (file)
@@ -33,7 +33,8 @@ ngx_os_io_t ngx_os_io = {
 ngx_int_t
 ngx_os_init(ngx_log_t *log)
 {
-    ngx_uint_t  n;
+    ngx_time_t  *tp;
+    ngx_uint_t   n;
 
 #if (NGX_HAVE_OS_SPECIFIC_INIT)
     if (ngx_os_specific_init(log) != NGX_OK) {
@@ -76,7 +77,8 @@ ngx_os_init(ngx_log_t *log)
     ngx_inherited_nonblocking = 0;
 #endif
 
-    srandom(ngx_time());
+    tp = ngx_timeofday();
+    srandom(((unsigned) ngx_pid << 16) ^ tp->sec ^ tp->msec);
 
     return NGX_OK;
 }
index 8c2d968a5e09cb76c450364a982d63159a9e3fe2..83b04ee627430b916124f1936ecd7423d6e034ba 100644 (file)
@@ -785,6 +785,7 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
 {
     sigset_t          set;
     ngx_int_t         n;
+    ngx_time_t       *tp;
     ngx_uint_t        i;
     ngx_cpuset_t     *cpu_affinity;
     struct rlimit     rlmt;
@@ -884,7 +885,8 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
                       "sigprocmask() failed");
     }
 
-    srandom(((unsigned) ngx_pid << 16) ^ ngx_time());
+    tp = ngx_timeofday();
+    srandom(((unsigned) ngx_pid << 16) ^ tp->sec ^ tp->msec);
 
     /*
      * disable deleting previous events for the listening sockets because
index ce2c77d3d29a52af0d74cece68771b5dafac8e7b..8b9c5ef22c7e72cb3a76f7393d8c0f01ad7812ec 100644 (file)
@@ -762,9 +762,11 @@ static ngx_thread_value_t __stdcall
 ngx_worker_thread(void *data)
 {
     ngx_int_t     n;
+    ngx_time_t   *tp;
     ngx_cycle_t  *cycle;
 
-    srand((ngx_pid << 16) ^ (unsigned) ngx_time());
+    tp = ngx_timeofday();
+    srand((ngx_pid << 16) ^ (unsigned) tp->sec ^ tp->msec);
 
     cycle = (ngx_cycle_t *) ngx_cycle;
 
index 9b26db5898809bc8c57cf72b5966e10648bb14aa..eb3e1386c77bf82eb937f3948c36cc39c962a1b9 100644 (file)
@@ -59,12 +59,13 @@ static GUID dx_guid = WSAID_DISCONNECTEX;
 ngx_int_t
 ngx_os_init(ngx_log_t *log)
 {
-    DWORD        bytes;
-    SOCKET       s;
-    WSADATA      wsd;
-    ngx_err_t    err;
-    ngx_uint_t   n;
-    SYSTEM_INFO  si;
+    DWORD         bytes;
+    SOCKET        s;
+    WSADATA       wsd;
+    ngx_err_t     err;
+    ngx_time_t   *tp;
+    ngx_uint_t    n;
+    SYSTEM_INFO   si;
 
     /* get Windows version */
 
@@ -237,7 +238,8 @@ ngx_os_init(ngx_log_t *log)
         ngx_sprintf((u_char *) ngx_unique, "%P%Z", ngx_pid);
     }
 
-    srand((ngx_pid << 16) ^ (unsigned) ngx_time());
+    tp = ngx_timeofday();
+    srand((ngx_pid << 16) ^ (unsigned) tp->sec ^ tp->msec);
 
     return NGX_OK;
 }