Fix issues with previous commit

This commit is contained in:
Justine Tunney 2024-09-10 01:59:46 -07:00
parent 2f48a02b44
commit a0a404a431
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
8 changed files with 122 additions and 57 deletions

View file

@ -86,19 +86,28 @@ static ssize_t GetRandomBsd(char *p, size_t n, void impl(char *, size_t)) {
}
}
static ssize_t GetDevUrandom(char *p, size_t n) {
static ssize_t GetDevUrandom(char *p, size_t n, unsigned f) {
int fd;
int oflags;
ssize_t rc;
BLOCK_SIGNALS;
BLOCK_CANCELATION;
fd = sys_openat(AT_FDCWD, "/dev/urandom", O_RDONLY | O_CLOEXEC, 0);
const char *dev;
BEGIN_CANCELATION_POINT;
if (f & GRND_RANDOM) {
dev = "/dev/random";
} else {
dev = "/dev/urandom";
}
oflags = O_RDONLY | O_CLOEXEC;
if (f & GRND_NONBLOCK)
oflags |= O_NONBLOCK;
fd = sys_openat(AT_FDCWD, dev, oflags, 0);
if (fd != -1) {
rc = sys_read(fd, p, n);
sys_close(fd);
} else {
rc = -1;
}
ALLOW_CANCELATION;
ALLOW_SIGNALS;
END_CANCELATION_POINT;
return rc;
}
@ -122,7 +131,7 @@ ssize_t __getrandom(void *p, size_t n, unsigned f) {
#endif
} else {
BEGIN_CANCELATION_POINT;
rc = GetDevUrandom(p, n);
rc = GetDevUrandom(p, n, f);
END_CANCELATION_POINT;
}
return rc;