|
@@ -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);
|