summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/nvmutil/nvmutil.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c
index 3ef0d57a..9865f24b 100644
--- a/util/nvmutil/nvmutil.c
+++ b/util/nvmutil/nvmutil.c
@@ -15,6 +15,13 @@
* -Os -Wall -Wextra -Werror -pedantic -std=c90
*/
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || \
+ defined(__NetBSD__) || defined(__APPLE__)
+#ifndef HAVE_ARC4RANDOM_BUF
+#define HAVE_ARC4RANDOM_BUF 1
+#endif
+#endif
+
/*
* I/O config (build-time)
*
@@ -329,7 +336,10 @@ static void set_mac_nib(size_t mac_str_pos,
size_t mac_byte_pos, size_t mac_nib_pos);
static ushort hextonum(char ch_s);
static ushort rhex(void);
+#if !defined(HAVE_ARC4RANDOM_BUF) || \
+ (HAVE_ARC4RANDOM_BUF) < 1
static ulong entropy_jitter(void);
+#endif
static void write_mac_part(size_t partnum);
/*
@@ -661,6 +671,11 @@ static int post_rw_checksum[] = {0, 0};
static dev_t gbe_dev;
static ino_t gbe_ino;
+#if defined(HAVE_ARC4RANDOM_BUF) && \
+ (HAVE_ARC4RANDOM_BUF) > 0
+void arc4random_buf(void *buf, size_t n);
+#endif
+
int
main(int argc, char *argv[])
{
@@ -1246,6 +1261,22 @@ hextonum(char ch_s)
return 16; /* invalid character */
}
+#if defined(HAVE_ARC4RANDOM_BUF) && \
+ (HAVE_ARC4RANDOM_BUF) > 0
+static ushort
+rhex(void)
+{
+ static u8 num[12];
+ static size_t n = 0;
+
+ if (!n) {
+ n = 12;
+ arc4random_buf(num, 12);
+ }
+
+ return num[--n] & 0xf;
+}
+#else
static ushort
rhex(void)
{
@@ -1300,6 +1331,7 @@ entropy_jitter(void)
return mix;
}
+#endif
static void
write_mac_part(size_t partnum)