summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--auto/unix34
-rw-r--r--src/nxt_random.c8
-rw-r--r--src/nxt_unix.h10
3 files changed, 42 insertions, 10 deletions
diff --git a/auto/unix b/auto/unix
index acacce0d..b6763852 100644
--- a/auto/unix
+++ b/auto/unix
@@ -3,25 +3,51 @@
# Copyright (C) NGINX, Inc.
-# Linux 3.17 getrandom().
+# getrandom().
nxt_feature="getrandom()"
nxt_feature_name=NXT_HAVE_GETRANDOM
-nxt_feature_run=
+nxt_feature_run=yes
nxt_feature_incs=
nxt_feature_libs=
-nxt_feature_test="#include <linux/random.h>
+nxt_feature_test="#include <unistd.h>
+ #include <sys/random.h>
int main() {
char buf[4];
- (void) getrandom(buf, 4, 0);
+ if (getrandom(buf, 4, 0) < 0) {
+ return 1;
+ }
return 0;
}"
. auto/feature
+if [ $nxt_found = no ]; then
+
+ # Linux 3.17 SYS_getrandom.
+
+ nxt_feature="SYS_getrandom in Linux"
+ nxt_feature_name=NXT_HAVE_LINUX_SYS_GETRANDOM
+ nxt_feature_test="#include <unistd.h>
+ #include <sys/syscall.h>
+ #include <linux/random.h>
+
+ int main() {
+ char buf[4];
+
+ if (syscall(SYS_getrandom, buf, 4, 0) < 0) {
+ return 1;
+ }
+
+ return 0;
+ }"
+ . auto/feature
+fi
+
+
nxt_feature="ucontext"
nxt_feature_name=NXT_HAVE_UCONTEXT
nxt_feature_run=
diff --git a/src/nxt_random.c b/src/nxt_random.c
index 3dde1f15..27387b1f 100644
--- a/src/nxt_random.c
+++ b/src/nxt_random.c
@@ -62,9 +62,13 @@ nxt_random_stir(nxt_random_t *r)
#if (NXT_HAVE_GETRANDOM)
- /* Linux 3.17 getrandom(). */
+ n = getrandom(&key, NXT_RANDOM_KEY_SIZE, 0);
- n = getrandom(key, NXT_RANDOM_KEY_SIZE, 0);
+#elif (NXT_HAVE_LINUX_SYS_GETRANDOM)
+
+ /* Linux 3.17 SYS_getrandom. */
+
+ n = syscall(SYS_getrandom, &key, NXT_RANDOM_KEY_SIZE, 0);
#endif
diff --git a/src/nxt_unix.h b/src/nxt_unix.h
index d61f00bc..33e9f247 100644
--- a/src/nxt_unix.h
+++ b/src/nxt_unix.h
@@ -32,10 +32,6 @@
#include <malloc.h> /* malloc_usable_size(). */
#include <sys/syscall.h> /* syscall(SYS_gettid). */
-#if (NXT_GETRANDOM)
-#include <linux/random.h> /* getrandom(). */
-#endif
-
#if (__GLIBC__ >= 2 && __GLIBC_MINOR__ >= 4)
/*
* POSIX semaphores using NPTL atomic/futex operations
@@ -234,6 +230,12 @@
#include <sys/sendfile.h>
#endif
+#if (NXT_HAVE_GETRANDOM)
+#include <sys/random.h> /* getrandom(). */
+#elif (NXT_HAVE_LINUX_SYS_GETRANDOM)
+#include <linux/random.h> /* SYS_getrandom. */
+#endif
+
#if (NXT_TEST_BUILD)
#include <nxt_test_build.h>