Linux NFS development
 help / color / mirror / Atom feed
* [nfs-utils 1/2] Fix build failure due to glibc <= 2.24 and check for Linux 3.17+
@ 2023-10-26 11:45 Giulio Benetti
  2023-10-26 11:45 ` [nfs-utils 2/2] Drop unused <sys/random.h> Giulio Benetti
  2023-10-26 19:47 ` [nfs-utils 1/2] Fix build failure due to glibc <= 2.24 and check for Linux 3.17+ Petr Vorel
  0 siblings, 2 replies; 7+ messages in thread
From: Giulio Benetti @ 2023-10-26 11:45 UTC (permalink / raw)
  To: linux-nfs; +Cc: Giulio Benetti

Function getrandom() is present only with glibc 2.24+ so add a direct
syscall otherwise. This is only possible with Linux 3.17+ so let's also
check for it and in case emit error on autotools configure.

Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
---
 configure.ac                      | 32 +++++++++++++++++++++++++++++++
 support/reexport/backend_sqlite.c | 17 +++++++++++++++-
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 6fbcb974..7efca90c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -328,6 +328,38 @@ AC_CHECK_HEADERS([sched.h], [], [])
 AC_CHECK_FUNCS([unshare fstatat statx], [] , [])
 AC_LIBPTHREAD([])
 
+AC_MSG_CHECKING([for getrandom (Linux 3.17+, glibc 2.25+)])
+AC_LINK_IFELSE([AC_LANG_SOURCE([
+  #include <stdlib.h>  /* for NULL */
+  #include <sys/random.h>
+  int main() {
+    return getrandom(NULL, 0U, 0U);
+  }
+])], [
+    AC_DEFINE([HAVE_GETRANDOM], [1],
+        [Define to 1 if you have the `getrandom' function.])
+    AC_MSG_RESULT([yes])
+], [
+    AC_MSG_RESULT([no])
+
+    AC_MSG_CHECKING([for syscall SYS_getrandom (Linux 3.17+)])
+    AC_LINK_IFELSE([AC_LANG_SOURCE([
+      #include <stdlib.h>  /* for NULL */
+      #include <unistd.h>  /* for syscall */
+      #include <sys/syscall.h>  /* for SYS_getrandom */
+      int main() {
+        syscall(SYS_getrandom, NULL, 0, 0);
+        return 0;
+      }
+    ])], [
+        AC_DEFINE([HAVE_SYSCALL_GETRANDOM], [1],
+            [Define to 1 if you have `syscall' and `SYS_getrandom'.])
+        AC_MSG_RESULT([yes])
+    ], [
+        AC_MSG_ERROR(['syscall' and 'SYS_getrandom' not found.])
+    ])
+])
+
 # rpc/rpc.h can come from the glibc or from libtirpc
 nfsutils_save_CPPFLAGS="${CPPFLAGS}"
 CPPFLAGS="${CPPFLAGS} ${TIRPC_CFLAGS}"
diff --git a/support/reexport/backend_sqlite.c b/support/reexport/backend_sqlite.c
index 132f30c4..f1e390bc 100644
--- a/support/reexport/backend_sqlite.c
+++ b/support/reexport/backend_sqlite.c
@@ -7,13 +7,28 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/random.h>
 #include <unistd.h>
 
 #include "conffile.h"
 #include "reexport_backend.h"
 #include "xlog.h"
 
+/* Fix up glibc <= 2.24 not having getrandom() */
+#if defined HAVE_GETRANDOM
+#include <sys/random.h>
+#else
+#include <sys/syscall.h>
+static ssize_t getrandom(void *buffer, size_t length, unsigned flags)
+{
+# if defined(__NR_getrandom)
+	return syscall(__NR_getrandom, buffer, length, flags);
+# else
+	errno = ENOSYS;
+	return -1;
+# endif
+}
+#endif
+
 #define REEXPDB_DBFILE NFS_STATEDIR "/reexpdb.sqlite3"
 #define REEXPDB_DBFILE_WAIT_USEC (5000)
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-10-18 14:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-26 11:45 [nfs-utils 1/2] Fix build failure due to glibc <= 2.24 and check for Linux 3.17+ Giulio Benetti
2023-10-26 11:45 ` [nfs-utils 2/2] Drop unused <sys/random.h> Giulio Benetti
2023-10-26 19:47 ` [nfs-utils 1/2] Fix build failure due to glibc <= 2.24 and check for Linux 3.17+ Petr Vorel
2023-10-26 21:18   ` Giulio Benetti
2024-10-18 13:13   ` Steve Dickson
2024-10-18 13:43     ` Petr Vorel
2024-10-18 14:37       ` Steve Dickson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox