[sshd.c]
     Clear alarm() before restarting sshd on SIGHUP.  Without this, if there's
     a SIGALRM pending (for SSH1 key regeneration) when sshd is SIGHUP'ed, the
     newly exec'ed sshd will get the SIGALRM and not have a handler for it,
     and the default action will terminate the listening sshd.  Analysis and
     patch from andrew at gaul.org.
This commit is contained in:
Darren Tucker 2007-02-25 20:37:21 +11:00
parent d04188e70e
commit ed623966e3
2 changed files with 10 additions and 2 deletions

View File

@ -4,6 +4,13 @@
[clientloop.c] [clientloop.c]
set maximum packet and window sizes the same for multiplexed clients set maximum packet and window sizes the same for multiplexed clients
as normal connections; ok markus@ as normal connections; ok markus@
- dtucker@cvs.openbsd.org 2007/02/21 11:00:05
[sshd.c]
Clear alarm() before restarting sshd on SIGHUP. Without this, if there's
a SIGALRM pending (for SSH1 key regeneration) when sshd is SIGHUP'ed, the
newly exec'ed sshd will get the SIGALRM and not have a handler for it,
and the default action will terminate the listening sshd. Analysis and
patch from andrew at gaul.org.
20070219 20070219
- (dtucker) OpenBSD CVS Sync - (dtucker) OpenBSD CVS Sync
@ -2749,4 +2756,4 @@
OpenServer 6 and add osr5bigcrypt support so when someone migrates OpenServer 6 and add osr5bigcrypt support so when someone migrates
passwords between UnixWare and OpenServer they will still work. OK dtucker@ passwords between UnixWare and OpenServer they will still work. OK dtucker@
$Id: ChangeLog,v 1.4620 2007/02/25 09:36:49 dtucker Exp $ $Id: ChangeLog,v 1.4621 2007/02/25 09:37:21 dtucker Exp $

3
sshd.c
View File

@ -1,4 +1,4 @@
/* $OpenBSD: sshd.c,v 1.348 2006/11/06 21:25:28 markus Exp $ */ /* $OpenBSD: sshd.c,v 1.349 2007/02/21 11:00:05 dtucker Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -305,6 +305,7 @@ sighup_restart(void)
logit("Received SIGHUP; restarting."); logit("Received SIGHUP; restarting.");
close_listen_socks(); close_listen_socks();
close_startup_pipes(); close_startup_pipes();
alarm(0); /* alarm timer persists across exec */
execv(saved_argv[0], saved_argv); execv(saved_argv[0], saved_argv);
logit("RESTART FAILED: av[0]='%.100s', error: %.100s.", saved_argv[0], logit("RESTART FAILED: av[0]='%.100s', error: %.100s.", saved_argv[0],
strerror(errno)); strerror(errno));