Browse Source

Make errno error log more useful for getrandom()

Making errno error log more useful for getrandom() call. Adding if statement to
make difference between ENOSYS and other errors.

Fixes #24500

Signed-off-by: Fernando Fernandez Mancera <ffernandezmancera@gmail.com>
Fernando Fernandez Mancera 6 years ago
parent
commit
313360e6e6
2 changed files with 14 additions and 2 deletions
  1. 3 0
      changes/ticket24500
  2. 11 2
      src/common/crypto.c

+ 3 - 0
changes/ticket24500

@@ -0,0 +1,3 @@
+  o Code simplification and refactoring: 
+    - Making more useful log messages for errno errors on getrandom() call.
+      Closes ticket 24500.

+ 11 - 2
src/common/crypto.c

@@ -2875,8 +2875,17 @@ crypto_strongest_rand_syscall(uint8_t *out, size_t out_len)
       tor_assert(errno != EAGAIN);
       tor_assert(errno != EINTR);
 
-      /* Probably ENOSYS. */
-      log_warn(LD_CRYPTO, "Can't get entropy from getrandom().");
+      /* Useful log message for errno. */
+      if (errno == ENOSYS) {
+        log_warn(LD_CRYPTO, "This warning is caused by ENOSYS error."
+                 " You are running a version of Tor built to support"
+                 " getrandom(), but the kernel is too old and doesn't"
+                 " implement this function.");
+      } else {
+        log_warn(LD_CRYPTO, "Can't get entropy from getrandom(). %s error.",
+                 strerror(errno));
+      }
+
       getrandom_works = 0; /* Don't bother trying again. */
       return -1;
       /* LCOV_EXCL_STOP */