]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
configure: disable arc4random on Linux
authorMiroslav Lichvar <mlichvar@redhat.com>
Wed, 3 Aug 2022 11:17:42 +0000 (13:17 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Wed, 3 Aug 2022 13:23:38 +0000 (15:23 +0200)
In glibc 2.36 was added the arc4random family of functions. However,
unlike on other supported systems, it is not a user-space PRNG
implementation. It just wraps the getrandom() system call with no
buffering, which causes a performance loss on NTP servers due to
the function being called twice for each response to add randomness
to the RX and TX timestamp below the clock precision.

Don't check for arc4random on Linux to keep using the buffered
getrandom().

configure

index ed230f390776c89ee73f75b5ea916f92f3f67a7c..fd777c8e12f7f1d80cea566716ab842e1459a918 100755 (executable)
--- a/configure
+++ b/configure
@@ -245,6 +245,7 @@ try_lockmem=0
 feat_asyncdns=1
 feat_forcednsretry=1
 try_clock_gettime=1
+try_arc4random=1
 try_recvmmsg=1
 feat_timestamping=1
 try_timestamping=0
@@ -421,6 +422,7 @@ case $OPERATINGSYSTEM in
         try_setsched=1
         try_lockmem=1
         try_phc=1
+        try_arc4random=0
         add_def LINUX
         echo "Configuring for " $SYSTEM
     ;;
@@ -702,8 +704,10 @@ then
   use_pthread=1
 fi
 
-if test_code 'arc4random_buf()' 'stdlib.h' '' '' \
-    'arc4random_buf((void *)1, 1);'; then
+if [ $try_arc4random = "1" ] && \
+  test_code 'arc4random_buf()' 'stdlib.h' '' '' \
+    'arc4random_buf((void *)1, 1);'
+then
   add_def HAVE_ARC4RANDOM
 else
   if test_code 'getrandom()' 'stdlib.h sys/random.h' '' '' \