mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 21:51:05 +00:00
random: add get_random_{bytes,u32,u64,int,long,once}_wait family
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>
This commit is contained in:
parent
e297a783e4
commit
da9ba564bd
3 changed files with 29 additions and 0 deletions
|
@ -274,6 +274,8 @@ do { \
|
||||||
|
|
||||||
#define net_get_random_once(buf, nbytes) \
|
#define net_get_random_once(buf, nbytes) \
|
||||||
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,
|
int kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
|
||||||
size_t num, size_t len);
|
size_t num, size_t len);
|
||||||
|
|
|
@ -53,5 +53,7 @@ void __do_once_done(bool *done, struct static_key *once_key,
|
||||||
|
|
||||||
#define get_random_once(buf, nbytes) \
|
#define get_random_once(buf, nbytes) \
|
||||||
DO_ONCE(get_random_bytes, (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 */
|
#endif /* _LINUX_ONCE_H */
|
||||||
|
|
|
@ -58,6 +58,31 @@ static inline unsigned long get_random_long(void)
|
||||||
#endif
|
#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);
|
unsigned long randomize_page(unsigned long start, unsigned long range);
|
||||||
|
|
||||||
u32 prandom_u32(void);
|
u32 prandom_u32(void);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue