Revert changes to use getrandom for M57.

This reverts commit 2d5848200404b2773c35bb1aa00dc3edd7a829d9 and
39ae1447592955adfee26444910b4487fd664dcb.

BUG=chromium:673183

Change-Id: I19abdb11fc3872d2499072de8269d0744ae2f90a
Reviewed-on: https://boringssl-review.googlesource.com/13235
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/rand/urandom.c b/crypto/rand/urandom.c
index 3ccd940..5e62538 100644
--- a/crypto/rand/urandom.c
+++ b/crypto/rand/urandom.c
@@ -22,7 +22,6 @@
 #include <assert.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 
@@ -89,16 +88,12 @@
 /* requested_lock is used to protect the |*_requested| variables. */
 static struct CRYPTO_STATIC_MUTEX requested_lock = CRYPTO_STATIC_MUTEX_INIT;
 
-/* The following constants are magic values of |urandom_fd|. */
-static const int kUnset = -2;
-static const int kHaveGetrandom = -3;
-
-/* urandom_fd_requested is set by |RAND_set_urandom_fd|. It's protected by
+/* urandom_fd_requested is set by |RAND_set_urandom_fd|.  It's protected by
  * |requested_lock|. */
-static int urandom_fd_requested = -2 /* kUnset */;
+static int urandom_fd_requested = -2;
 
 /* urandom_fd is a file descriptor to /dev/urandom. It's protected by |once|. */
-static int urandom_fd = -2 /* kUnset */;
+static int urandom_fd = -2;
 
 /* urandom_buffering_requested is set by |RAND_enable_fork_unsafe_buffering|.
  * It's protected by |requested_lock|. */
@@ -121,31 +116,12 @@
   CRYPTO_STATIC_MUTEX_unlock_read(&requested_lock);
 
 #if defined(USE_SYS_getrandom)
+  /* Initial test of getrandom to find any unexpected behavior. */
   uint8_t dummy;
-  long getrandom_ret =
-      syscall(SYS_getrandom, &dummy, sizeof(dummy), GRND_NONBLOCK);
+  syscall(SYS_getrandom, &dummy, sizeof(dummy), GRND_NONBLOCK);
+#endif
 
-  if (getrandom_ret == 1) {
-    urandom_fd = kHaveGetrandom;
-    return;
-  } else if (getrandom_ret == -1 && errno == EAGAIN) {
-    fprintf(stderr,
-            "getrandom indicates that the entropy pool has not been "
-            "initialized. Rather than continue with poor entropy, this process "
-            "will block until entropy is available.\n");
-    do {
-      getrandom_ret =
-          syscall(SYS_getrandom, &dummy, sizeof(dummy), 0 /* no flags */);
-    } while (getrandom_ret == -1 && errno == EINTR);
-
-    if (getrandom_ret == 1) {
-      urandom_fd = kHaveGetrandom;
-      return;
-    }
-  }
-#endif  /* USE_SYS_getrandom */
-
-  if (fd == kUnset) {
+  if (fd == -2) {
     do {
       fd = open("/dev/urandom", O_RDONLY);
     } while (fd == -1 && errno == EINTR);
@@ -181,9 +157,7 @@
   CRYPTO_STATIC_MUTEX_unlock_write(&requested_lock);
 
   CRYPTO_once(&once, init_once);
-  if (urandom_fd == kHaveGetrandom) {
-    close(fd);
-  } else if (urandom_fd != fd) {
+  if (urandom_fd != fd) {
     abort();  // Already initialized.
   }
 }
@@ -195,7 +169,7 @@
       abort();
     }
   } else {
-    fd = kUnset;
+    fd = -2;
   }
 
   CRYPTO_STATIC_MUTEX_lock_write(&requested_lock);
@@ -204,16 +178,8 @@
   CRYPTO_STATIC_MUTEX_unlock_write(&requested_lock);
 
   CRYPTO_once(&once, init_once);
-  if (urandom_buffering != 1) {
-    abort();  // Already initialized
-  }
-
-  if (fd >= 0) {
-    if (urandom_fd == kHaveGetrandom) {
-      close(fd);
-    } else if (urandom_fd != fd) {
-      abort();  // Already initialized.
-    }
+  if (urandom_buffering != 1 || (fd >= 0 && urandom_fd != fd)) {
+    abort();  // Already initialized.
   }
 }
 
@@ -238,42 +204,15 @@
   return buf;
 }
 
-#if defined(USE_SYS_getrandom) && defined(__has_feature)
-#if __has_feature(memory_sanitizer)
-void __msan_unpoison(void *, size_t);
-#endif
-#endif
-
 /* fill_with_entropy writes |len| bytes of entropy into |out|. It returns one
  * on success and zero on error. */
 static char fill_with_entropy(uint8_t *out, size_t len) {
+  ssize_t r;
+
   while (len > 0) {
-    ssize_t r;
-
-    if (urandom_fd == kHaveGetrandom) {
-#if defined(USE_SYS_getrandom)
-      do {
-        r = syscall(SYS_getrandom, out, len, 0 /* no flags */);
-      } while (r == -1 && errno == EINTR);
-
-#if defined(__has_feature)
-#if __has_feature(memory_sanitizer)
-      if (r > 0) {
-        /* MSAN doesn't recognise |syscall| and thus doesn't notice that we
-         * have initialised the output buffer. */
-        __msan_unpoison(out, r);
-      }
-#endif /* memory_sanitizer */
-#endif /*__has_feature */
-
-#else /* USE_SYS_getrandom */
-      abort();
-#endif
-    } else {
-      do {
-        r = read(urandom_fd, out, len);
-      } while (r == -1 && errno == EINTR);
-    }
+    do {
+      r = read(urandom_fd, out, len);
+    } while (r == -1 && errno == EINTR);
 
     if (r <= 0) {
       return 0;