From: Giulio Benetti <giulio.benetti@benettiengineering.com>
To: linux-nfs@vger.kernel.org
Cc: Giulio Benetti <giulio.benetti@benettiengineering.com>
Subject: [nfs-utils 1/2] Fix build failure due to glibc <= 2.24 and check for Linux 3.17+
Date: Thu, 26 Oct 2023 13:45:21 +0200 [thread overview]
Message-ID: <20231026114522.567140-1-giulio.benetti@benettiengineering.com> (raw)
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
next reply other threads:[~2023-10-26 11:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-26 11:45 Giulio Benetti [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231026114522.567140-1-giulio.benetti@benettiengineering.com \
--to=giulio.benetti@benettiengineering.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox