|
Message-ID: <CAH8yC8kq7OVBw_L32qD+OMgUhhh0K3huHpamO+4ABrE5i=fPkw@mail.gmail.com> Date: Tue, 6 Jun 2017 01:11:51 -0400 From: Jeffrey Walton <noloader@...il.com> To: "Jason A. Donenfeld" <Jason@...c4.com> Cc: "Theodore Ts'o" <tytso@....edu>, Linux Crypto Mailing List <linux-crypto@...r.kernel.org>, LKML <linux-kernel@...r.kernel.org>, kernel-hardening@...ts.openwall.com, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, David Miller <davem@...emloft.net> Subject: Re: [PATCH v3 02/13] random: add get_random_{bytes,u32,u64,int,long,once}_wait family On Mon, Jun 5, 2017 at 8:50 PM, Jason A. Donenfeld <Jason@...c4.com> wrote: > These functions are simple convenience wrappers that call > wait_for_random_bytes before calling the respective get_random_* > function. It may be advantageous to add a timeout, too. There's been a number of times I did not want to wait an INFINITE amount of time for a completion. (In another context). Jeff > Signed-off-by: Jason A. Donenfeld <Jason@...c4.com> > --- > include/linux/net.h | 2 ++ > include/linux/once.h | 2 ++ > include/linux/random.h | 25 +++++++++++++++++++++++++ > 3 files changed, 29 insertions(+) > > diff --git a/include/linux/net.h b/include/linux/net.h > index abcfa46a2bd9..dda2cc939a53 100644 > --- a/include/linux/net.h > +++ b/include/linux/net.h > @@ -274,6 +274,8 @@ do { \ > > #define net_get_random_once(buf, nbytes) \ > get_random_once((buf), (nbytes)) > +#define net_get_random_once_wait(buf, nbytes) \ > + get_random_once_wait((buf), (nbytes)) > > int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec, > size_t num, size_t len); > diff --git a/include/linux/once.h b/include/linux/once.h > index 285f12cb40e6..9c98aaa87cbc 100644 > --- a/include/linux/once.h > +++ b/include/linux/once.h > @@ -53,5 +53,7 @@ void __do_once_done(bool *done, struct static_key *once_key, > > #define get_random_once(buf, nbytes) \ > DO_ONCE(get_random_bytes, (buf), (nbytes)) > +#define get_random_once_wait(buf, nbytes) \ > + DO_ONCE(get_random_bytes_wait, (buf), (nbytes)) \ > > #endif /* _LINUX_ONCE_H */ > diff --git a/include/linux/random.h b/include/linux/random.h > index e29929347c95..4aecc339558d 100644 > --- a/include/linux/random.h > +++ b/include/linux/random.h > @@ -58,6 +58,31 @@ static inline unsigned long get_random_long(void) > #endif > } > > +/* Calls wait_for_random_bytes() and then calls get_random_bytes(buf, nbytes). > + * Returns the result of the call to wait_for_random_bytes. */ > +static inline int get_random_bytes_wait(void *buf, int nbytes) > +{ > + int ret = wait_for_random_bytes(); > + if (unlikely(ret)) > + return ret; > + get_random_bytes(buf, nbytes); > + return 0; > +} > + > +#define declare_get_random_var_wait(var) \ > + static inline int get_random_ ## var ## _wait(var *out) { \ > + int ret = wait_for_random_bytes(); \ > + if (unlikely(ret)) \ > + return ret; \ > + *out = get_random_ ## var(); \ > + return 0; \ > + } > +declare_get_random_var_wait(u32) > +declare_get_random_var_wait(u64) > +declare_get_random_var_wait(int) > +declare_get_random_var_wait(long) > +#undef declare_get_random_var > + > unsigned long randomize_page(unsigned long start, unsigned long range); > > u32 prandom_u32(void);
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.