[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[hurd, commited] hurd: Make getrandom a stub inside the random translato
From: |
Samuel Thibault |
Subject: |
[hurd, commited] hurd: Make getrandom a stub inside the random translator |
Date: |
Fri, 31 Dec 2021 08:54:57 +0100 |
glibc uses /dev/urandom for getrandom(), and from version 2.34 malloc
initialization uses it. We have to detect when we are running the random
translator itself, in which case we can't read ourself.
---
sysdeps/mach/hurd/getrandom.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/sysdeps/mach/hurd/getrandom.c b/sysdeps/mach/hurd/getrandom.c
index 645f2930b7..24f9ac60f7 100644
--- a/sysdeps/mach/hurd/getrandom.c
+++ b/sysdeps/mach/hurd/getrandom.c
@@ -21,6 +21,8 @@
#include <unistd.h>
#include <not-cancel.h>
+extern char *trivfs_server_name __attribute__((weak));
+
/* Write up to LENGTH bytes of randomness starting at BUFFER.
Return the number of bytes written, or -1 on error. */
ssize_t
@@ -31,6 +33,17 @@ __getrandom (void *buffer, size_t length, unsigned int flags)
size_t amount_read;
int fd;
+ if (&trivfs_server_name && trivfs_server_name
+ && trivfs_server_name[0] == 'r'
+ && trivfs_server_name[1] == 'a'
+ && trivfs_server_name[2] == 'n'
+ && trivfs_server_name[3] == 'd'
+ && trivfs_server_name[4] == 'o'
+ && trivfs_server_name[5] == 'm'
+ && trivfs_server_name[6] == '\0')
+ /* We are random, don't try to read ourselves! */
+ return length;
+
if (flags & GRND_RANDOM)
random_source = "/dev/random";
--
2.34.1
- [hurd, commited] hurd: Make getrandom a stub inside the random translator,
Samuel Thibault <=