On Wed, Mar 15, 2023 at 12:01:57PM +0100, Laszlo Ersek wrote:
Don't try to test async-signal-safety, only that
NBD_INTERNAL_FORK_SAFE_ASSERT() works similarly to assert():
- it prints diagnostics to stderr,
- it calls abort().
Some unfortunate gymnastics are necessary to avoid littering the system
with unwanted core dumps.
Signed-off-by: Laszlo Ersek <lersek(a)redhat.com>
---
diff --git a/configure.ac b/configure.ac
index b6d60c3df6a1..62fe470b6cd5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -132,11 +132,16 @@ dnl Check for various libc functions, all optional.
dnl
dnl posix_fadvise helps to optimise linear reads and writes.
dnl
+dnl When /proc/sys/kernel/core_pattern starts with a pipe (|) symbol, Linux
+dnl ignores "ulimit -c" and (equivalent) setrlimit(RLIMIT_CORE) actions, for
+dnl disabling core dumping. Only prctl() can be used then, for that purpose.
+dnl
dnl strerrordesc_np (glibc only) is preferred over sys_errlist:
dnl
https://lists.fedoraproject.org/archives/list/glibc@lists.fedoraproject.o...
AC_CHECK_FUNCS([\
posix_fadvise \
posix_memalign \
+ prctl \
strerrordesc_np \
valloc])
AC_CHECK_FUNCS looks for whether the given entry point can be linked
with, which is okay for functions in the common headers (<stdlib.h>,
<unistd.h>, ...) that autoconf includes in its test programs by
default. But...
diff --git a/lib/test-fork-safe-assert.c b/lib/test-fork-safe-assert.c
new file mode 100644
index 000000000000..4a4f6e88ce65
--- /dev/null
+++ b/lib/test-fork-safe-assert.c
@@ -0,0 +1,66 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_PRCTL
+#include <sys/prctl.h>
+#endif
...the fact that prctl() is in a non-standard header makes me wonder
if we might fail to detect the function merely because we didn't
include the right header, rather than because its symbol was not
exported.
On the other hand, prctl() is definitely Linux-specific, so I think
you are quite safe in assuming that <sys/prctl.h> exists if and only
if prctl() is a linkable entry point. If it does turn out to break
someone, we can fix it in a followup patch, so no change needed in
your usage at this time.
+++ b/lib/test-fork-safe-assert.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
Reviewed-by: Eric Blake <eblake(a)redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization:
qemu.org |
libvirt.org