Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 1 Jan 2018 15:47:48 -0500
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: [PATCH] Add getrandom syscall wrapper function

On Mon, Jan 01, 2018 at 09:31:23PM +0100, Hauke Mehrtens wrote:
> This syscall is available since Linux 3.17 and was also implemented in
> glibc in version 2.25. This is a pure syscall wrapper liker glibc does
> it.
> ---
>  include/sys/random.h  | 19 +++++++++++++++++++
>  src/linux/getrandom.c | 11 +++++++++++
>  2 files changed, 30 insertions(+)
>  create mode 100644 include/sys/random.h
>  create mode 100644 src/linux/getrandom.c
> 
> diff --git a/include/sys/random.h b/include/sys/random.h
> new file mode 100644
> index 00000000..5540f877
> --- /dev/null
> +++ b/include/sys/random.h
> @@ -0,0 +1,19 @@
> +#ifndef _SYS_RANDOM_H
> +#define _SYS_RANDOM_H
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#define __NEED_size_t
> +#define __NEED_ssize_t
> +#include <bits/alltypes.h>
> +
> +#define GRND_NONBLOCK	0x0001
> +#define GRND_RANDOM	0x0002
> +
> +ssize_t getrandom(void *buf, size_t buflen, unsigned int flags);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +#endif
> diff --git a/src/linux/getrandom.c b/src/linux/getrandom.c
> new file mode 100644
> index 00000000..50b07df9
> --- /dev/null
> +++ b/src/linux/getrandom.c
> @@ -0,0 +1,11 @@
> +#include <sys/random.h>
> +#include "syscall.h"
> +
> +ssize_t getrandom(void *buf, size_t buflen, unsigned int flags)
> +{
> +#ifdef SYS_getrandom
> +	return syscall_cp(SYS_getrandom, buf, buflen, flags);
> +#else
> +	return __syscall_ret(-ENOSYS);
> +#endif
> +}
> -- 
> 2.11.0

The #ifdef doesn't make sense; if the definition is missing then it's
a bug in musl source.

Aside from that I think the patch is okay but I'm not sure it's
complete. There should probably also be getentropy(), and we've
discussed in the past but never reached any conclusion on whether
there should be a fallback when the syscall doesn't exist (running on
old kernel).

Rich

Powered by blists - more mailing lists

Your e-mail address:

Powered by Openwall GNU/*/Linux - Powered by OpenVZ