summaryrefslogtreecommitdiff
path: root/sshd.c
diff options
context:
space:
mode:
authormarkus@openbsd.org <markus@openbsd.org>2020-05-15 08:34:03 +0000
committerDamien Miller <djm@mindrot.org>2020-05-27 10:13:17 +1000
commit4b307faf2fb0e63e51a550b37652f7f972df9676 (patch)
tree9199c8c5ffe34afb822ac80a0217635c73a4f456 /sshd.c
parentaf8b16fb2cce880341c0ee570ceb0d84104bdcc0 (diff)
upstream: sshd listener must not block if reexecd sshd exits
in write(2) on config_s[0] if the forked child exits early before finishing recv_rexec_state (e.g. with fatal()) because config_s[1] stays open in the parent. this prevents the parent from accepting new connections. ok djm, deraadt OpenBSD-Commit-ID: 92ccfeb939ccd55bda914dc3fe84582158c4a9ef
Diffstat (limited to 'sshd.c')
-rw-r--r--sshd.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sshd.c b/sshd.c
index a345bae70..4151e11fe 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshd.c,v 1.553 2020/05/08 05:13:14 djm Exp $ */ 1/* $OpenBSD: sshd.c,v 1.554 2020/05/15 08:34:03 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1270,6 +1270,7 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1270 startup_pipe = -1; 1270 startup_pipe = -1;
1271 pid = getpid(); 1271 pid = getpid();
1272 if (rexec_flag) { 1272 if (rexec_flag) {
1273 close(config_s[1]);
1273 send_rexec_state(config_s[0], cfg); 1274 send_rexec_state(config_s[0], cfg);
1274 close(config_s[0]); 1275 close(config_s[0]);
1275 } 1276 }
@@ -1328,9 +1329,9 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1328 close(startup_p[1]); 1329 close(startup_p[1]);
1329 1330
1330 if (rexec_flag) { 1331 if (rexec_flag) {
1332 close(config_s[1]);
1331 send_rexec_state(config_s[0], cfg); 1333 send_rexec_state(config_s[0], cfg);
1332 close(config_s[0]); 1334 close(config_s[0]);
1333 close(config_s[1]);
1334 } 1335 }
1335 close(*newsock); 1336 close(*newsock);
1336 1337