[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/10] qga: handle possible SIGPIPE in guest-file-wr
From: |
Denis V. Lunev |
Subject: |
[Qemu-devel] [PATCH 04/10] qga: handle possible SIGPIPE in guest-file-write |
Date: |
Fri, 19 Jun 2015 19:57:49 +0300 |
From: Olga Krishtal <address@hidden>
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: Olga Krishtal <address@hidden>
Acked-by: Roman Kagan <address@hidden>
Signed-off-by: Denis V. Lunev <address@hidden>
CC: Eric Blake <address@hidden>
CC: Michael Roth <address@hidden>
---
qga/commands-posix.c | 16 ++++++++++++++++
qga/main.c | 6 ++++++
2 files changed, 22 insertions(+)
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index aa11932..64d9b2d 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -961,6 +961,20 @@ static int guest_exec_set_std(GuestFileHandle *gfh, int
std_fd, int fd_null)
return 0;
}
+/** Reset ignored signals back to default. */
+static void guest_exec_reset_child_sig(void)
+{
+ struct sigaction sigact;
+
+ memset(&sigact, 0, sizeof(struct sigaction));
+ sigact.sa_handler = SIG_DFL;
+
+ if (sigaction(SIGPIPE, &sigact, NULL) != 0) {
+ slog("sigaction() failed to reset child process's SIGPIPE: %s",
+ strerror(errno));
+ }
+}
+
GuestExec *qmp_guest_exec(const char *path,
bool has_params, strList *params,
bool has_env, strList *env,
@@ -1032,6 +1046,8 @@ GuestExec *qmp_guest_exec(const char *path,
/* exit(1); */
}
+ guest_exec_reset_child_sig();
+
execvpe(path, (char * const *)argv, (char * const *)envp);
slog("guest-exec child failed: %s", strerror(errno));
exit(1);
diff --git a/qga/main.c b/qga/main.c
index 9939a2b..bc6414c 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -160,6 +160,12 @@ static gboolean register_signal_handlers(void)
g_error("error configuring signal handler: %s", strerror(errno));
}
+ sigact.sa_handler = SIG_IGN;
+ if (sigaction(SIGPIPE, &sigact, NULL) != 0) {
+ g_error("error configuring SIGPIPE signal handler: %s",
+ strerror(errno));
+ }
+
return true;
}
--
1.9.1
- [Qemu-devel] [PATCH v5 0/10] QGA: disk and volume info for Windows & guest exec, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 01/10] util, qga: drop guest_file_toggle_flags, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 02/10] qga: implement guest-pipe-open command, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 04/10] qga: handle possible SIGPIPE in guest-file-write,
Denis V. Lunev <=
- [Qemu-devel] [PATCH 05/10] qga: guest-pipe-open for Windows guest, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 06/10] qga: guest exec functionality for Windows guests, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 03/10] qga: guest exec functionality for Unix guests, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 07/10] qga: added empty qmp_quest_get_fsinfo functionality., Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 08/10] qga: added mountpoint and filesystem type for single volume, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 09/10] qga: added bus type and disk location path, Denis V. Lunev, 2015/06/19
- [Qemu-devel] [PATCH 10/10] qga: added GuestPCIAddress information, Denis V. Lunev, 2015/06/19