summaryrefslogtreecommitdiff
path: root/debian/patches/sigstop.patch
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2014-04-14 12:11:05 +0100
committerColin Watson <cjwatson@debian.org>2014-04-14 12:11:07 +0100
commit38252a749b8c69154a08924a1c2851aecaed87a7 (patch)
tree3064b42a1153257dfe1ce24f7e659363a77893c7 /debian/patches/sigstop.patch
parentceaa88579f692501b1c17f541c083d42ccd63ac1 (diff)
parent08a63152deb5deda168aaef870bdb9f56425acb3 (diff)
Never signal the service supervisor with SIGSTOP more than once, to
prevent a hang on re-exec (thanks, Robie Basak; LP: #1306877).
Diffstat (limited to 'debian/patches/sigstop.patch')
-rw-r--r--debian/patches/sigstop.patch21
1 files changed, 14 insertions, 7 deletions
diff --git a/debian/patches/sigstop.patch b/debian/patches/sigstop.patch
index 91c9d5434..6a15e0dc5 100644
--- a/debian/patches/sigstop.patch
+++ b/debian/patches/sigstop.patch
@@ -1,27 +1,34 @@
1From d9ac4d127f53d92cf3426fba28ff351e5e165ae2 Mon Sep 17 00:00:00 2001 1From cfeaa0ba2ce2859573f7e980be09ef05511f56a2 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:17 +0000 3Date: Sun, 9 Feb 2014 16:10:17 +0000
4Subject: Support synchronisation with service supervisor using SIGSTOP 4Subject: Support synchronisation with service supervisor using SIGSTOP
5 5
6Author: Robie Basak <robie.basak@ubuntu.com>
6Forwarded: no 7Forwarded: no
7Last-Update: 2013-09-14 8Last-Update: 2014-04-14
8 9
9Patch-Name: sigstop.patch 10Patch-Name: sigstop.patch
10--- 11---
11 sshd.c | 4 ++++ 12 sshd.c | 10 ++++++++++
12 1 file changed, 4 insertions(+) 13 1 file changed, 10 insertions(+)
13 14
14diff --git a/sshd.c b/sshd.c 15diff --git a/sshd.c b/sshd.c
15index 665c0b9..ffe360c 100644 16index 665c0b9..0964491 100644
16--- a/sshd.c 17--- a/sshd.c
17+++ b/sshd.c 18+++ b/sshd.c
18@@ -1931,6 +1931,10 @@ main(int ac, char **av) 19@@ -1931,6 +1931,16 @@ main(int ac, char **av)
19 } 20 }
20 } 21 }
21 22
22+ if (getenv("SSH_SIGSTOP")) 23+ if (getenv("SSH_SIGSTOP")) {
23+ /* Tell service supervisor that we are ready. */ 24+ /* Tell service supervisor that we are ready. */
24+ kill(getpid(), SIGSTOP); 25+ kill(getpid(), SIGSTOP);
26+ /* The service supervisor only ever expects a single
27+ * STOP signal, so do not ever signal it again, even
28+ * in the case of a re-exec or future children.
29+ */
30+ unsetenv("SSH_SIGSTOP");
31+ }
25+ 32+
26 /* Accept a connection and return in a forked child */ 33 /* Accept a connection and return in a forked child */
27 server_accept_loop(&sock_in, &sock_out, 34 server_accept_loop(&sock_in, &sock_out,