[PATCH v3 2/4] lib: random: get_random_bytes from HWRNG if present
Oleksij Rempel
o.rempel at pengutronix.de
Fri Mar 17 08:46:36 PDT 2017
From: Steffen Trumtrar <s.trumtrar at pengutronix.de>
Instead of generating pseudo random numbers, get random bytes
from an optional HW generator, if enabled and registered.
Signed-off-by: Steffen Trumtrar <s.trumtrar at pengutronix.de>
Signed-off-by: Oleksij Rempel <o.rempel at pengutronix.de>
---
lib/random.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/lib/random.c b/lib/random.c
index 210fea994..5cd40915a 100644
--- a/lib/random.c
+++ b/lib/random.c
@@ -1,5 +1,6 @@
#include <common.h>
#include <stdlib.h>
+#include <linux/hw_random.h>
static unsigned int random_seed;
@@ -22,6 +23,23 @@ void get_random_bytes(void *_buf, int len)
{
char *buf = _buf;
+ if (IS_ENABLED(CONFIG_HWRNG)) {
+ struct hwrng *rng;
+
+ rng = hwrng_get_first();
+ if (!IS_ERR(rng)) {
+ while (len) {
+ int bytes = hwrng_get_data(rng, _buf, len, true);
+ if (bytes <= 0)
+ goto sw_fallback;
+ len -= bytes;
+ }
+
+ return;
+ }
+ }
+
+sw_fallback:
while (len--)
*buf++ = rand() % 256;
}
--
2.11.0
More information about the barebox
mailing list