• E
    command: avoid leaking fds across fork · 5d804ffa
    Eric Blake 提交于
    Since libvirt is multi-threaded, we should use FD_CLOEXEC as much
    as possible in the parent, and only relax fds to inherited after
    forking, to avoid leaking an fd created in one thread to a fork
    run in another thread.  This gets us closer to that ideal, by
    making virCommand automatically clear FD_CLOEXEC on fds intended
    for the child, as well as avoiding a window of time with non-cloexec
    pipes created for capturing output.
    
    * src/util/command.c (virExecWithHook): Use CLOEXEC in parent.  In
    child, guarantee that all fds to pass to child are inheritable.
    (getDevNull): Use CLOEXEC.
    (prepareStdFd): New helper function.
    (virCommandRun, virCommandRequireHandshake): Use pipe2.
    * src/qemu/qemu_command.c (qemuBuildCommandLine): Simplify caller.
    5d804ffa
qemu_command.c 223.3 KB