Print the name of the binary when blocking in getrandom.
If a startup process blocks, it's very useful to know which it was.
Change-Id: I04dd541695a61cfceb8142ea45d4bd5e3492c6ec
Update-note: updates internal bug 117227663.
Reviewed-on: https://boringssl-review.googlesource.com/c/32544
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/crypto/fipsmodule/rand/urandom.c b/crypto/fipsmodule/rand/urandom.c
index 4923fa4..777920e 100644
--- a/crypto/fipsmodule/rand/urandom.c
+++ b/crypto/fipsmodule/rand/urandom.c
@@ -33,6 +33,7 @@
#include <linux/random.h>
#include <sys/ioctl.h>
#endif
+#include <sys/auxv.h>
#include <sys/syscall.h>
#endif
@@ -133,11 +134,21 @@
boringssl_getrandom(&dummy, sizeof(dummy), GRND_NONBLOCK);
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");
+ // Attempt to get the path of the current process to aid in debugging when
+ // something blocks.
+ const char *current_process = "<unknown>";
+#if !defined(OPENSSL_ANDROID)
+ const unsigned long getauxval_ret = getauxval(AT_EXECFN);
+ if (getauxval_ret != 0) {
+ current_process = (const char *)getauxval_ret;
+ }
+#endif
+
+ fprintf(stderr,
+ "%s: 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",
+ current_process);
getrandom_ret =
boringssl_getrandom(&dummy, sizeof(dummy), 0 /* no flags */);