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 <ler...@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/gl...@lists.fedoraproject.org/thread/WJHGG2OO7ABNAYICGA5WQZ2Q34Q2FEHU/
>  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 <ebl...@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org
_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to