From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12336 Path: news.gmane.org!.POSTED!not-for-mail From: William Pitcock Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH v2] Add getrandom syscall wrapper and getentropy function Date: Mon, 8 Jan 2018 16:06:41 -0600 Message-ID: References: <20180106220809.10078-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="UTF-8" X-Trace: blaine.gmane.org 1515449099 16337 195.159.176.226 (8 Jan 2018 22:04:59 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 8 Jan 2018 22:04:59 +0000 (UTC) Cc: Hauke Mehrtens To: musl@lists.openwall.com Original-X-From: musl-return-12352-gllmg-musl=m.gmane.org@lists.openwall.com Mon Jan 08 23:04:55 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 1eYfXK-0003rn-IA for gllmg-musl@m.gmane.org; Mon, 08 Jan 2018 23:04:54 +0100 Original-Received: (qmail 24426 invoked by uid 550); 8 Jan 2018 22:06:54 -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 24404 invoked from network); 8 Jan 2018 22:06:53 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dereferenced-org.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=90FqF0e1hkttZ23GDBLWMf4Df7stfTHmbva3T/rc89U=; b=Vc2MhelNatICPCj5EC+WmpRCV3cgmAOlRJTvOFgWbgmzFbYcWGTmqT0uSzyTMcmvJC jbRbe3sbAQDfx8rUIB61IqXdwEBLu+BorUJNx3OHMlavyUbJdEtJrhFwMSJjmGlap/ak 0hvJfpCvffJFtfIfRCWS+VYopV3tI38o/6qBbqHmd+RcINZnZdXhUgs2czL2lHnCWpPQ 4TpcA4ysNhWV+CpofXuuFLxLdF/JzVi5Ev+l2l0c8IQQcxLwcweh5mXhZNhqDsYgoa+x HHcNthYirfkhYPCwuhW5JwZvzQAQFDyUgttvC+c0WvPtRadA6tEYInl+2AfR3/sC0dfI 5tsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=90FqF0e1hkttZ23GDBLWMf4Df7stfTHmbva3T/rc89U=; b=uOs2UHC1Vaz7bsgtNo4pxC6Fzzy3hbd80Zsux15zqovDc6M3i0VxngthIg/T5vCDHx G6Hd191j+Hk/dzPbrrvTY7dB4dyjsbGVh4u5l8th4Lqujbf6YR2pB2y5BteM4sF5DjPw eFHv4ACnj+LFaf3ypZO6tGKNrP/nuCLjrkeiPCBneUE6rXcrha3DDf6jpzSRcwRLZolx k2K6JEbqqPXXD4Vh1mMU2fzZgKasNdHgamd2ltot1WBe1QLYzIIkCX/Vlem/13KK17ba KdRFILiFv834DfNWXLLhh8FYI+8UZdQQg0dIMnYRbThqMLZqvgbPT068q4s5YwZ6sJgO +uOQ== X-Gm-Message-State: AKwxytftFJTkkniwOLZzDZ2li4A9Z4XNerBEC38qwg9I61yNyD7DwBgd /JBt9gVe/N3D4W8SJzdZFQWv0JjlMcFnFC+l7ZsAKg== X-Google-Smtp-Source: ACJfBov1XHEuglXFgRYXgS57QhVjlW/PZGC0Q2NNddVc2htk9uuAewTKdhnOqCu8af+qTCbmRwJGZiZuXDG25HoQDuU= X-Received: by 10.200.41.227 with SMTP id 32mr17794844qtt.262.1515449201983; Mon, 08 Jan 2018 14:06:41 -0800 (PST) In-Reply-To: <20180106220809.10078-1-hauke@hauke-m.de> Xref: news.gmane.org gmane.linux.lib.musl.general:12336 Archived-At: Hi, On Sat, Jan 6, 2018 at 4:08 PM, Hauke Mehrtens wrote: > This syscall is available since Linux 3.17 and was also implemented in > glibc in version 2.25 using the same interfaces. > The getrandom function is a pure syscall wrapper liker glibc does it. > getentropy is implemented on top of the getrandom syscall and fills the > buffer. > > Currently no fallback is implemented this could be possible by using > AT_RANDOM in the future. > --- > include/sys/random.h | 21 +++++++++++++++++++++ > src/linux/getentropy.c | 29 +++++++++++++++++++++++++++++ > src/linux/getrandom.c | 7 +++++++ > 3 files changed, 57 insertions(+) > create mode 100644 include/sys/random.h > create mode 100644 src/linux/getentropy.c > 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..5b09e394 > --- /dev/null > +++ b/include/sys/random.h > @@ -0,0 +1,21 @@ > +#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); > + > +int getentropy(void *buffer, size_t length); Function prototypes in headers should be provided without naming the arguments. > + > +#ifdef __cplusplus > +} > +#endif > +#endif > diff --git a/src/linux/getentropy.c b/src/linux/getentropy.c > new file mode 100644 > index 00000000..48ca3d51 > --- /dev/null > +++ b/src/linux/getentropy.c > @@ -0,0 +1,29 @@ > +#include > +#include > +#include "syscall.h" > + > +int getentropy(void *buffer, size_t length) > +{ > + int ret; > + char *pos = buffer; > + size_t rem = length; > + > + if (length > 256) { > + return __syscall_ret(-EIO); > + } > + > + while (rem) { > + ret = __syscall_cp(SYS_getrandom, pos, rem, 0); > + if (ret == -EINTR) { > + continue; > + } else if (ret == -EFAULT || ret == -ENOSYS) { > + return __syscall_ret(ret); > + } else if (ret <= 0) { > + return __syscall_ret(-EIO); > + } > + > + pos += ret; > + rem -= ret; > + } > + return 0; > +} > diff --git a/src/linux/getrandom.c b/src/linux/getrandom.c > new file mode 100644 > index 00000000..795b932c > --- /dev/null > +++ b/src/linux/getrandom.c > @@ -0,0 +1,7 @@ > +#include > +#include "syscall.h" > + > +ssize_t getrandom(void *buf, size_t buflen, unsigned int flags) > +{ > + return syscall_cp(SYS_getrandom, buf, buflen, flags); > +} > -- > 2.11.0 > Otherwise this looks okay to me. William