|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From 1dedb74a2e1d840b531b76b01a76979f3b57456b Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From: Lennart Poettering <lennart@poettering.net>
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Date: Tue, 26 Aug 2014 21:04:21 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Subject: [PATCH] util: reset signals when we fork off agents
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
If we invoke agents, we should make sure we actually can kill them
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
again. I mean, it's probably not our job to cleanup the signals if our
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
tools are invoked in weird contexts, but at least we should make sure,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
that the subprocesses we invoke and intend to control work as intended.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Also see:
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
http://lists.freedesktop.org/archives/systemd-devel/2014-August/022460.html
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/shared/util.c | 18 ++++++++++++++++++
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/shared/util.h | 1 +
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
2 files changed, 19 insertions(+)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/shared/util.c b/src/shared/util.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index 4af2d3ceba..98c07163da 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/shared/util.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/shared/util.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -959,6 +959,18 @@ int reset_all_signal_handlers(void) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+int reset_signal_mask(void) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ sigset_t ss;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (sigemptyset(&ss) < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return -errno;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return -errno;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
char *strstrip(char *s) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
char *e;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -5131,6 +5143,12 @@ int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *pa
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
/* Don't leak fds to the agent */
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
close_all_fds(except, n_except);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ /* Make sure we actually can kill the agent, if we need to, in
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * case somebody invoked us from a shell script that trapped
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * SIGTERM or so... */
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ reset_all_signal_handlers();
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ reset_signal_mask();
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
stdout_is_tty = isatty(STDOUT_FILENO);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
stderr_is_tty = isatty(STDERR_FILENO);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/shared/util.h b/src/shared/util.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index cd947dbbef..ea87c96956 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/shared/util.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/shared/util.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -274,6 +274,7 @@ int readlink_and_make_absolute(const char *p, char **r);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
int readlink_and_canonicalize(const char *p, char **r);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
int reset_all_signal_handlers(void);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+int reset_signal_mask(void);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
char *strstrip(char *s);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
char *delete_chars(char *s, const char *bad);
|