cryptographicallyRandomValuesFromOS should use arc4random_buf on Darwin.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Aug 2015 22:01:34 +0000 (22:01 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Aug 2015 22:01:34 +0000 (22:01 +0000)
https://bugs.webkit.org/show_bug.cgi?id=148038

Patch by Keith Miller <keith_miller@apple.com> on 2015-08-14
Reviewed by Geoffrey Garen.

Currently, we open a file descriptor to /dev/urandom, which can sometimes
fail to open. Using arc4random_buf instead should get around this issue.

* wtf/OSRandomSource.cpp:
(WTF::cryptographicallyRandomValuesFromOS):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@188489 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/OSRandomSource.cpp

index b6101c2..388d6da 100644 (file)
@@ -1,3 +1,16 @@
+2015-08-14  Keith Miller  <keith_miller@apple.com>
+
+        cryptographicallyRandomValuesFromOS should use arc4random_buf on Darwin.
+        https://bugs.webkit.org/show_bug.cgi?id=148038
+
+        Reviewed by Geoffrey Garen.
+
+        Currently, we open a file descriptor to /dev/urandom, which can sometimes
+        fail to open. Using arc4random_buf instead should get around this issue.
+
+        * wtf/OSRandomSource.cpp:
+        (WTF::cryptographicallyRandomValuesFromOS):
+
 2015-08-14  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r188444.
index 7e12aa3..9dacaa1 100644 (file)
@@ -29,7 +29,7 @@
 #include <stdint.h>
 #include <stdlib.h>
 
-#if OS(UNIX)
+#if !OS(DARWIN) && OS(UNIX)
 #include <errno.h>
 #include <fcntl.h>
 #include <unistd.h>
@@ -42,6 +42,7 @@
 
 namespace WTF {
 
+#if !OS(DARWIN) && OS(UNIX)
 NEVER_INLINE NO_RETURN_DUE_TO_CRASH static void crashUnableToOpenURandom()
 {
     CRASH();
@@ -51,10 +52,13 @@ NEVER_INLINE NO_RETURN_DUE_TO_CRASH static void crashUnableToReadFromURandom()
 {
     CRASH();
 }
+#endif
     
 void cryptographicallyRandomValuesFromOS(unsigned char* buffer, size_t length)
 {
-#if OS(UNIX)
+#if OS(DARWIN)
+    return arc4random_buf(buffer, length);
+#elif OS(UNIX)
     int fd = open("/dev/urandom", O_RDONLY, 0);
     if (fd < 0)
         crashUnableToOpenURandom(); // We need /dev/urandom for this API to work...