summaryrefslogtreecommitdiff
path: root/usr.bin/ssh/ssh-sk-client.c
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@cvs.openbsd.org>2020-01-23 07:10:23 +0000
committerDarren Tucker <dtucker@cvs.openbsd.org>2020-01-23 07:10:23 +0000
commitedf1e6d70d7ddc0e037b52523e6f679236a7f4ca (patch)
tree726b9215e18c7e203e0a4cdf5cb896433d43bafd /usr.bin/ssh/ssh-sk-client.c
parent6c8ddfa10d8732d02d6d3c66d9c16a7a313a0b05 (diff)
Replace all calls to signal(2) with a wrapper around sigaction(2).
This wrapper blocks all other signals during the handler preventing races between handlers, and sets SA_RESTART which should reduce the potential for short read/write operations.
Diffstat (limited to 'usr.bin/ssh/ssh-sk-client.c')
-rw-r--r--usr.bin/ssh/ssh-sk-client.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/usr.bin/ssh/ssh-sk-client.c b/usr.bin/ssh/ssh-sk-client.c
index 6ca85aaeba1..aeb878324e7 100644
--- a/usr.bin/ssh/ssh-sk-client.c
+++ b/usr.bin/ssh/ssh-sk-client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-sk-client.c,v 1.6 2020/01/21 07:07:31 djm Exp $ */
+/* $OpenBSD: ssh-sk-client.c,v 1.7 2020/01/23 07:10:22 dtucker Exp $ */
/*
* Copyright (c) 2019 Google LLC
*
@@ -37,6 +37,7 @@
#include "digest.h"
#include "pathnames.h"
#include "ssh-sk.h"
+#include "misc.h"
/* #define DEBUG_SK 1 */
@@ -71,13 +72,13 @@ start_helper(int *fdp, pid_t *pidp, void (**osigchldp)(int))
error("socketpair: %s", strerror(errno));
return SSH_ERR_SYSTEM_ERROR;
}
- osigchld = signal(SIGCHLD, SIG_DFL);
+ osigchld = ssh_signal(SIGCHLD, SIG_DFL);
if ((pid = fork()) == -1) {
oerrno = errno;
error("fork: %s", strerror(errno));
close(pair[0]);
close(pair[1]);
- signal(SIGCHLD, osigchld);
+ ssh_signal(SIGCHLD, osigchld);
errno = oerrno;
return SSH_ERR_SYSTEM_ERROR;
}
@@ -218,7 +219,7 @@ client_converse(struct sshbuf *msg, struct sshbuf **respp, u_int type)
}
sshbuf_free(req);
sshbuf_free(resp);
- signal(SIGCHLD, osigchld);
+ ssh_signal(SIGCHLD, osigchld);
errno = oerrno;
return r;