Hello,
Andrew Eggenberger, le mar. 29 oct. 2019 23:28:26 -0500, a ecrit:
> Updated patch attached.
Thanks!
> +/* Implementation of getentropy based on the getrandom system call.
getrandom is not a system call on GNU/Hurd, just say "on getrandom".
> + /* NB: No cancellation point. */
> + ssize_t bytes = getrandom(buffer, end - buffer, 0);
Ah, yes, the cancelation thing. Inside getrandom(), rather use
__open_nocancel, __read_nocancel, and __close_nocancel.
> +/* Write up to LENGTH bytes of randomness starting at BUFFER.
> + Return the number of bytes written, or -1 on error. */
> +ssize_t
> +getrandom (void *buffer, size_t length, unsigned int flags)
> +{
> + char* random_source = "/dev/urandom";
You can even make it a const char* actually.
> + int amount_read, fp;
> +
> + if (flags & GRND_RANDOM){
> + random_source = "/dev/random";
> + }
> +
> + fp = open(random_source, O_RDONLY);
> + amount_read = read(fp, buffer, length);
You need to check against errors, and in such a case return -1 (leaving
errno as set by the function).
Samuel