summaryrefslogtreecommitdiffstats
path: root/usr.bin/script/script.c
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2015-07-19 06:12:06 +0000
committerderaadt <deraadt@openbsd.org>2015-07-19 06:12:06 +0000
commit9e69f79d5dc5d8a3ed6c32a6be327528561c3dd6 (patch)
treedc9e020caa6df6a3ab6bab4cbb79a0c234453a81 /usr.bin/script/script.c
parentCrank the major of libtls: the behaviour of tls_write() has been (diff)
downloadwireguard-openbsd-9e69f79d5dc5d8a3ed6c32a6be327528561c3dd6.tar.xz
wireguard-openbsd-9e69f79d5dc5d8a3ed6c32a6be327528561c3dd6.zip
SIGCHLD handler was established before forking into two processes.
As a result it also ran in the child (incorrect). ok miod
Diffstat (limited to 'usr.bin/script/script.c')
-rw-r--r--usr.bin/script/script.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/usr.bin/script/script.c b/usr.bin/script/script.c
index 83b3cce43cd..102141a0001 100644
--- a/usr.bin/script/script.c
+++ b/usr.bin/script/script.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: script.c,v 1.26 2015/03/15 00:41:28 millert Exp $ */
+/* $OpenBSD: script.c,v 1.27 2015/07/19 06:12:06 deraadt Exp $ */
/* $NetBSD: script.c,v 1.3 1994/12/21 08:55:43 jtc Exp $ */
/*
@@ -139,9 +139,6 @@ main(int argc, char *argv[])
bzero(&sa, sizeof sa);
sigemptyset(&sa.sa_mask);
- sa.sa_handler = finish;
- (void)sigaction(SIGCHLD, &sa, NULL);
-
sa.sa_handler = handlesigwinch;
sa.sa_flags = SA_RESTART;
(void)sigaction(SIGWINCH, &sa, NULL);
@@ -163,6 +160,11 @@ main(int argc, char *argv[])
doshell();
}
+ bzero(&sa, sizeof sa);
+ sigemptyset(&sa.sa_mask);
+ sa.sa_handler = finish;
+ (void)sigaction(SIGCHLD, &sa, NULL);
+
(void)fclose(fscript);
while (1) {
if (dead)
@@ -241,6 +243,11 @@ dooutput(void)
sa.sa_handler = scriptflush;
(void)sigaction(SIGALRM, &sa, NULL);
+ bzero(&sa, sizeof sa);
+ sigemptyset(&sa.sa_mask);
+ sa.sa_handler = SIG_IGN;
+ (void)sigaction(SIGCHLD, &sa, NULL);
+
value.it_interval.tv_sec = 30;
value.it_interval.tv_usec = 0;
value.it_value = value.it_interval;