]> git.proxmox.com Git - lxc.git/blob - debian/patches/fixes/0008-fix-signal-sending-in-lxc.init.patch
bump version to 3.0.0-3
[lxc.git] / debian / patches / fixes / 0008-fix-signal-sending-in-lxc.init.patch
1 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2 From: Tycho Andersen <tycho@tycho.ws>
3 Date: Wed, 4 Apr 2018 17:45:29 -0600
4 Subject: [PATCH] fix signal sending in lxc.init
5
6 The problem here is that these two clauses were ordered backwards: we first
7 check if the signal came from not the init pid, and if it did, then we give
8 a notice and return. The comment notes that this is intended to protect
9 against SIGCHLD, but we don't in fact know if the signal is a SIGCHLD yet,
10 because that's tested in the next hunk.
11
12 The symptom is that if I e.g. send SIGTERM from the outside world to the
13 container init, it ignores it and gives this notice. If we re-order these
14 clauses, it forwards non SIGCHLD signals, and ignores SIGCHLD signals from
15 things that aren't the real container process.
16
17 Signed-off-by: Tycho Andersen <tycho@tycho.ws>
18 ---
19 src/lxc/start.c | 12 ++++++------
20 1 file changed, 6 insertions(+), 6 deletions(-)
21
22 diff --git a/src/lxc/start.c b/src/lxc/start.c
23 index ae13aae9..1982270e 100644
24 --- a/src/lxc/start.c
25 +++ b/src/lxc/start.c
26 @@ -380,6 +380,12 @@ static int signal_handler(int fd, uint32_t events, void *data,
27 return hdlr->init_died ? LXC_MAINLOOP_CLOSE : 0;
28 }
29
30 + if (siginfo.ssi_signo != SIGCHLD) {
31 + kill(hdlr->pid, siginfo.ssi_signo);
32 + INFO("Forwarded signal %d to pid %d", siginfo.ssi_signo, hdlr->pid);
33 + return hdlr->init_died ? LXC_MAINLOOP_CLOSE : 0;
34 + }
35 +
36 /* More robustness, protect ourself from a SIGCHLD sent
37 * by a process different from the container init.
38 */
39 @@ -389,12 +395,6 @@ static int signal_handler(int fd, uint32_t events, void *data,
40 return hdlr->init_died ? LXC_MAINLOOP_CLOSE : 0;
41 }
42
43 - if (siginfo.ssi_signo != SIGCHLD) {
44 - kill(hdlr->pid, siginfo.ssi_signo);
45 - INFO("Forwarded signal %d to pid %d", siginfo.ssi_signo, hdlr->pid);
46 - return hdlr->init_died ? LXC_MAINLOOP_CLOSE : 0;
47 - }
48 -
49 if (siginfo.ssi_code == CLD_STOPPED) {
50 INFO("Container init process was stopped");
51 return hdlr->init_died ? LXC_MAINLOOP_CLOSE : 0;
52 --
53 2.11.0
54