qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 05/16] osdep: add qemu_fork() wrapper for saf


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH v2 05/16] osdep: add qemu_fork() wrapper for safely handling signals
Date: Mon, 19 Oct 2015 16:24:20 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

On 10/12/2015 05:14 AM, Daniel P. Berrange wrote:
> When using regular fork() the child process of course inherits
> all the parents' signal handlers. If the child then proceeds
> to close() any open file descriptors, it may break some of those
> registered signal handlers. The child generally does not want to
> ever run any of the signal handlers tha parent may have installed

s/tha/that the/

> in the short time before it exec's. The parent may also have blocked
> various signals which the child process will want enabled.
> 
> This introduces a wrapper qemu_fork() that takes care to sanitize
> signal handling across fork. Before forking it blocks all signals
> in the parent thread. After fork returns, the parent unblocks the
> signals and carries on as usual. The child, however, resets all the
> signal handlers back to their defaults before it unblocks signals.
> The child process can now exec the binary in a "clean" signal
> environment.
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>
> ---
>  include/qemu/osdep.h | 16 ++++++++++++
>  util/oslib-posix.c   | 71 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  util/oslib-win32.c   |  9 +++++++
>  3 files changed, 96 insertions(+)

Looks very similar to libvirt's fork() wrapper :)


> +        for (i = 1; i < NSIG; i++) {
> +            /* Only possible errors are EFAULT or EINVAL The former
> +             * won't happen, the latter we expect, so no need to check
> +             * return value */
> +            (void)sigaction(i, &sig_action, NULL);
> +        }

Libvirt gets to rely on gnulib for a guaranteed definition of NSIG.  But
POSIX doesn't document it, and I'm not sure whether it is present on all
platforms qemu targets.  I guess we'll find out soon enough.

Reviewed-by: Eric Blake <address@hidden>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]