From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57546) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zhmxx-0001di-CU for qemu-devel@nongnu.org; Thu, 01 Oct 2015 19:08:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zhmxu-0003OS-5R for qemu-devel@nongnu.org; Thu, 01 Oct 2015 19:08:45 -0400 Received: from e17.ny.us.ibm.com ([129.33.205.207]:53166) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zhmxu-0003Nl-1t for qemu-devel@nongnu.org; Thu, 01 Oct 2015 19:08:42 -0400 Received: from localhost by e17.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 1 Oct 2015 19:08:41 -0400 Received: from b01cxnp22036.gho.pok.ibm.com (b01cxnp22036.gho.pok.ibm.com [9.57.198.26]) by d01dlp03.pok.ibm.com (Postfix) with ESMTP id F2924C90048 for ; Thu, 1 Oct 2015 18:56:50 -0400 (EDT) Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by b01cxnp22036.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t91N8cAl54984880 for ; Thu, 1 Oct 2015 23:08:38 GMT Received: from d01av04.pok.ibm.com (localhost [127.0.0.1]) by d01av04.pok.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t91N8c5w032419 for ; Thu, 1 Oct 2015 19:08:38 -0400 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Roth In-Reply-To: <1443685083-6242-5-git-send-email-den@openvz.org> References: <1443685083-6242-1-git-send-email-den@openvz.org> <1443685083-6242-5-git-send-email-den@openvz.org> Message-ID: <20151001230358.32707.52105@loki> Date: Thu, 01 Oct 2015 18:03:58 -0500 Subject: Re: [Qemu-devel] [PATCH 4/5] qga: handle possible SIGPIPE in guest-file-write List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Denis V. Lunev" Cc: Yuri Pudgorodskiy , qemu-devel@nongnu.org Quoting Denis V. Lunev (2015-10-01 02:38:02) > qemu-ga should not exit on guest-file-write to pipe without read end > but proper error code should be returned. The behavior of the > spawned process should be default thus SIGPIPE processing should be > reset to default after fork() but before exec(). > = > Signed-off-by: Denis V. Lunev > Signed-off-by: Yuri Pudgorodskiy > CC: Michael Roth Reviewed-by: Michael Roth > --- > qga/commands.c | 18 +++++++++++++++++- > qga/main.c | 6 ++++++ > 2 files changed, 23 insertions(+), 1 deletion(-) > = > diff --git a/qga/commands.c b/qga/commands.c > index 6efd6aa..199c7c3 100644 > --- a/qga/commands.c > +++ b/qga/commands.c > @@ -194,6 +194,22 @@ static void guest_exec_child_watch(GPid pid, gint st= atus, gpointer data) > g_spawn_close_pid(pid); > } > = > +/** Reset ignored signals back to default. */ > +static void guest_exec_task_setup(gpointer data) > +{ > +#if !defined(G_OS_WIN32) > + struct sigaction sigact; > + > + memset(&sigact, 0, sizeof(struct sigaction)); > + sigact.sa_handler =3D SIG_DFL; > + > + if (sigaction(SIGPIPE, &sigact, NULL) !=3D 0) { > + slog("sigaction() failed to reset child process's SIGPIPE: %s", > + strerror(errno)); > + } > +#endif > +} > + > GuestExec *qmp_guest_exec(const char *path, > bool has_arg, strList *arg, > bool has_env, strList *env, > @@ -219,7 +235,7 @@ GuestExec *qmp_guest_exec(const char *path, > G_SPAWN_SEARCH_PATH | > G_SPAWN_DO_NOT_REAP_CHILD | > G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, > - NULL, NULL, &pid, NULL, NULL, NULL, &gerr); > + guest_exec_task_setup, NULL, &pid, NULL, NULL, NULL, &gerr); > if (!ret) { > error_setg(err, QERR_QGA_COMMAND_FAILED, gerr->message); > g_error_free(gerr); > diff --git a/qga/main.c b/qga/main.c > index d8e063a..07e3c1c 100644 > --- a/qga/main.c > +++ b/qga/main.c > @@ -161,6 +161,12 @@ static gboolean register_signal_handlers(void) > g_error("error configuring signal handler: %s", strerror(errno)); > } > = > + sigact.sa_handler =3D SIG_IGN; > + if (sigaction(SIGPIPE, &sigact, NULL) !=3D 0) { > + g_error("error configuring SIGPIPE signal handler: %s", > + strerror(errno)); > + } > + > return true; > } > = > -- = > 2.1.4 >=20