@@ -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}"
@@ -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)
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(-)