lkml.org 
[lkml]   [2022]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 011/264] random: add get_random_{bytes,u32,u64,int,long,once}_wait family
    Date
    From: "Jason A. Donenfeld" <Jason@zx2c4.com>

    commit da9ba564bd683374b8d319756f312821b8265b06 upstream.

    These functions are simple convenience wrappers that call
    wait_for_random_bytes before calling the respective get_random_*
    function.

    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    include/linux/net.h | 2 ++
    include/linux/once.h | 2 ++
    include/linux/random.h | 25 +++++++++++++++++++++++++
    3 files changed, 29 insertions(+)

    --- 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);
    --- a/include/linux/once.h
    +++ b/include/linux/once.h
    @@ -53,5 +53,7 @@ void __do_once_done(bool *done, struct s

    #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 */
    --- a/include/linux/random.h
    +++ b/include/linux/random.h
    @@ -58,6 +58,31 @@ static inline unsigned long get_random_l
    #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);

    /*

    \
     
     \ /
      Last update: 2022-06-23 18:47    [W:5.338 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site