Reviewers: Mads Ager,
Message:
This is a quick change to improve the random seed on Windows before freeze
for
m9.
Description:
Seed the random number generator in Windows with rand_s
This is a quick fix for m9. It works on Windows Chrome because the random
device
is already initialized before permissions are dropped for the Chrome
sandbox.
The same trick isn't possible on Windows or Mac.
I think the long-term solution is to provide an interface for supplying v8
with
a true random number generator. Then Chrome can just hook up the generator
from
base/rand_util.h
BUG=http://code.google.com/p/v8/issues/detail?id=936
TEST=None.
Please review this at http://codereview.chromium.org/5356006/
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/platform-win32.cc
Index: src/platform-win32.cc
===================================================================
--- src/platform-win32.cc (revision 5888)
+++ src/platform-win32.cc (working copy)
@@ -54,6 +54,11 @@
#define _WIN32_WINNT 0x501
#endif
+// Required before stdlib.h inclsion for cryptographically strong rand_s.
+#ifndef _CRT_RAND_S
+#define _CRT_RAND_S
+#endif // _CRT_RAND_S
+
#include <windows.h>
#include <time.h> // For LocalOffset() implementation.
@@ -584,11 +589,8 @@
void OS::Setup() {
// Seed the random number generator.
- // Convert the current time to a 64-bit integer first, before converting
it
- // to an unsigned. Going directly can cause an overflow and the seed to
be
- // set to all ones. The seed will be identical for different instances
that
- // call this setup code within the same millisecond.
- uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
+ unsigned int seed;
+ CHECK_EQ(rand_s(&seed), 0);
srand(static_cast<unsigned int>(seed));
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev