diff mbox series

[nfs-utils,1/2] Fix build failure due to glibc <= 2.24 and check for Linux 3.17+

Message ID 20231026114522.567140-1-giulio.benetti@benettiengineering.com (mailing list archive)
State New, archived
Headers show
Series [nfs-utils,1/2] Fix build failure due to glibc <= 2.24 and check for Linux 3.17+ | expand

Commit Message

Giulio Benetti Oct. 26, 2023, 11:45 a.m. UTC
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(-)

Comments

Petr Vorel Oct. 26, 2023, 7:47 p.m. UTC | #1
interesting, I yesterday sent patch [1] solving the same problem (although it
might not be that obvious from the patchset name). Let's see which one will be
taken.

Kind regards,
Petr

[1] https://lore.kernel.org/linux-nfs/20231025205720.GB460410@pevik/T/#m4c02286afae09318f6b95ff837750708d5065cd5
Giulio Benetti Oct. 26, 2023, 9:18 p.m. UTC | #2
Hi Petr,

On 26/10/23 21:47, Petr Vorel wrote:
> interesting, I yesterday sent patch [1] solving the same problem (although it
> might not be that obvious from the patchset name). Let's see which one will be
> taken.
> 
> Kind regards,
> Petr
> 
> [1] https://lore.kernel.org/linux-nfs/20231025205720.GB460410@pevik/T/#m4c02286afae09318f6b95ff837750708d5065cd5

I totally forgotten to check Patchwork before working on it. Your patch
looks good, better than mine. Maybe you can improve the part of the
syscall because it's not always available. You can then send a patch for
Buildroot too with the patch you've pointed since there you're
nfs-utils package Maintainer too.
Steve Dickson Oct. 18, 2024, 1:13 p.m. UTC | #3
Hello,

On 10/26/23 3:47 PM, Petr Vorel wrote:
> interesting, I yesterday sent patch [1] solving the same problem (although it
> might not be that obvious from the patchset name). Let's see which one will be
> taken.
> 
> Kind regards,
> Petr
> 
> [1] https://lore.kernel.org/linux-nfs/20231025205720.GB460410@pevik/T/#m4c02286afae09318f6b95ff837750708d5065cd5
There are a number of patches in the above link
Could you please post, in the usual format, that
fixes the issue.

tia,

steved.
Petr Vorel Oct. 18, 2024, 1:43 p.m. UTC | #4
Hi Steve, Giulio, Richard,

> Hello,

> On 10/26/23 3:47 PM, Petr Vorel wrote:
> > interesting, I yesterday sent patch [1] solving the same problem (although it
> > might not be that obvious from the patchset name). Let's see which one will be
> > taken.

> > Kind regards,
> > Petr

> > [1] https://lore.kernel.org/linux-nfs/20231025205720.GB460410@pevik/T/#m4c02286afae09318f6b95ff837750708d5065cd5
> There are a number of patches in the above link
> Could you please post, in the usual format, that
> fixes the issue.

@Steve IMHO all build failures on glibc <= 2.24 and Linux 3.17+ has been fixed
in f92fd6ca ("support/backend_sqlite.c: Add getrandom() fallback") [1].

I don't see any new issue in the thread which is from 2023.
Are you just double checking if any patch was left on ML?
Or do I miss something (it's Friday maybe I'm just tired)?

@Giulio @Richard feel free to correct me.

Kind regards,
Petr

> tia,

> steved.

[1] https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commit;h=f92fd6ca815025c435dabf45da28472ac0aa04a4
Steve Dickson Oct. 18, 2024, 2:37 p.m. UTC | #5
On 10/18/24 9:43 AM, Petr Vorel wrote:
> Hi Steve, Giulio, Richard,
> 
>> Hello,
> 
>> On 10/26/23 3:47 PM, Petr Vorel wrote:
>>> interesting, I yesterday sent patch [1] solving the same problem (although it
>>> might not be that obvious from the patchset name). Let's see which one will be
>>> taken.
> 
>>> Kind regards,
>>> Petr
> 
>>> [1] https://lore.kernel.org/linux-nfs/20231025205720.GB460410@pevik/T/#m4c02286afae09318f6b95ff837750708d5065cd5
>> There are a number of patches in the above link
>> Could you please post, in the usual format, that
>> fixes the issue.
> 
> @Steve IMHO all build failures on glibc <= 2.24 and Linux 3.17+ has been fixed
> in f92fd6ca ("support/backend_sqlite.c: Add getrandom() fallback") [1].
Perfect! Thank you!

steved.

> 
> I don't see any new issue in the thread which is from 2023.
> Are you just double checking if any patch was left on ML?
> Or do I miss something (it's Friday maybe I'm just tired)?
> 
> @Giulio @Richard feel free to correct me.
> 
> Kind regards,
> Petr
> 
>> tia,
> 
>> steved.
> 
> [1] https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commit;h=f92fd6ca815025c435dabf45da28472ac0aa04a4
>
diff mbox series

Patch

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)