diff options
author | markus@openbsd.org <markus@openbsd.org> | 2020-05-15 08:34:03 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2020-05-27 10:13:17 +1000 |
commit | 4b307faf2fb0e63e51a550b37652f7f972df9676 (patch) | |
tree | 9199c8c5ffe34afb822ac80a0217635c73a4f456 /sshd.c | |
parent | af8b16fb2cce880341c0ee570ceb0d84104bdcc0 (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.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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 | ||