From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12296 Path: news.gmane.org!.POSTED!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH] Add getrandom syscall wrapper function Date: Mon, 1 Jan 2018 15:47:48 -0500 Message-ID: <20180101204748.GH1627@brightrain.aerifal.cx> References: <20180101203123.12816-1-hauke@hauke-m.de> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: blaine.gmane.org 1514839570 18968 195.159.176.226 (1 Jan 2018 20:46:10 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 1 Jan 2018 20:46:10 +0000 (UTC) User-Agent: Mutt/1.5.21 (2010-09-15) To: musl@lists.openwall.com Original-X-From: musl-return-12312-gllmg-musl=m.gmane.org@lists.openwall.com Mon Jan 01 21:46:05 2018 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1eW6y9-0004MZ-9y for gllmg-musl@m.gmane.org; Mon, 01 Jan 2018 21:46:01 +0100 Original-Received: (qmail 13955 invoked by uid 550); 1 Jan 2018 20:48:02 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 13923 invoked from network); 1 Jan 2018 20:48:01 -0000 Content-Disposition: inline In-Reply-To: <20180101203123.12816-1-hauke@hauke-m.de> Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:12296 Archived-At: 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 > + > +#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 > +#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