[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
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [PATCH v2 06/16] coroutine: move into libqemuutil.a library, (continued)
- [Qemu-devel] [PATCH v2 06/16] coroutine: move into libqemuutil.a library, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 07/16] util: pull Buffer code out of VNC module, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 08/16] io: add abstract QIOChannel classes, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 09/16] io: add helper module for creating watches on FDs, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 12/16] io: add QIOChannelFile class, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 13/16] io: add QIOChannelTLS class, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 14/16] io: add QIOChannelWebsock class, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 16/16] io: add QIOChannelBuffer class, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 15/16] io: add QIOChannelCommand class, Daniel P. Berrange, 2015/10/12
- [Qemu-devel] [PATCH v2 05/16] osdep: add qemu_fork() wrapper for safely handling signals, Daniel P. Berrange, 2015/10/15
- Re: [Qemu-devel] [PATCH v2 05/16] osdep: add qemu_fork() wrapper for safely handling signals,
Eric Blake <=
- [Qemu-devel] [PATCH v2 11/16] io: add QIOChannelSocket class, Daniel P. Berrange, 2015/10/15
- [Qemu-devel] [PATCH v2 10/16] io: add QIOTask class for async operations, Daniel P. Berrange, 2015/10/15
- Re: [Qemu-devel] [PATCH v2 00/16] Introduce I/O channels framework, Daniel P. Berrange, 2015/10/19