Skip to content

Commit 42f6e1f

Browse files
committed
Always seed PRNG with PID, seconds, and milliseconds.
1 parent 31389e4 commit 42f6e1f

4 files changed

Lines changed: 19 additions & 11 deletions

File tree

src/os/unix/ngx_posix_init.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ ngx_os_io_t ngx_os_io = {
3333
ngx_int_t
3434
ngx_os_init(ngx_log_t *log)
3535
{
36-
ngx_uint_t n;
36+
ngx_time_t *tp;
37+
ngx_uint_t n;
3738

3839
#if (NGX_HAVE_OS_SPECIFIC_INIT)
3940
if (ngx_os_specific_init(log) != NGX_OK) {
@@ -76,7 +77,8 @@ ngx_os_init(ngx_log_t *log)
7677
ngx_inherited_nonblocking = 0;
7778
#endif
7879

79-
srandom(ngx_time());
80+
tp = ngx_timeofday();
81+
srandom(((unsigned) ngx_pid << 16) ^ tp->sec ^ tp->msec);
8082

8183
return NGX_OK;
8284
}

src/os/unix/ngx_process_cycle.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,7 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
785785
{
786786
sigset_t set;
787787
ngx_int_t n;
788+
ngx_time_t *tp;
788789
ngx_uint_t i;
789790
ngx_cpuset_t *cpu_affinity;
790791
struct rlimit rlmt;
@@ -884,7 +885,8 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
884885
"sigprocmask() failed");
885886
}
886887

887-
srandom(((unsigned) ngx_pid << 16) ^ ngx_time());
888+
tp = ngx_timeofday();
889+
srandom(((unsigned) ngx_pid << 16) ^ tp->sec ^ tp->msec);
888890

889891
/*
890892
* disable deleting previous events for the listening sockets because

src/os/win32/ngx_process_cycle.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,9 +762,11 @@ static ngx_thread_value_t __stdcall
762762
ngx_worker_thread(void *data)
763763
{
764764
ngx_int_t n;
765+
ngx_time_t *tp;
765766
ngx_cycle_t *cycle;
766767

767-
srand((ngx_pid << 16) ^ (unsigned) ngx_time());
768+
tp = ngx_timeofday();
769+
srand((ngx_pid << 16) ^ (unsigned) tp->sec ^ tp->msec);
768770

769771
cycle = (ngx_cycle_t *) ngx_cycle;
770772

src/os/win32/ngx_win32_init.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,13 @@ static GUID dx_guid = WSAID_DISCONNECTEX;
5959
ngx_int_t
6060
ngx_os_init(ngx_log_t *log)
6161
{
62-
DWORD bytes;
63-
SOCKET s;
64-
WSADATA wsd;
65-
ngx_err_t err;
66-
ngx_uint_t n;
67-
SYSTEM_INFO si;
62+
DWORD bytes;
63+
SOCKET s;
64+
WSADATA wsd;
65+
ngx_err_t err;
66+
ngx_time_t *tp;
67+
ngx_uint_t n;
68+
SYSTEM_INFO si;
6869

6970
/* get Windows version */
7071

@@ -237,7 +238,8 @@ ngx_os_init(ngx_log_t *log)
237238
ngx_sprintf((u_char *) ngx_unique, "%P%Z", ngx_pid);
238239
}
239240

240-
srand((ngx_pid << 16) ^ (unsigned) ngx_time());
241+
tp = ngx_timeofday();
242+
srand((ngx_pid << 16) ^ (unsigned) tp->sec ^ tp->msec);
241243

242244
return NGX_OK;
243245
}

0 commit comments

Comments
 (0)