From: dtucker Date: Sun, 25 Feb 2007 09:37:21 +0000 (+0000) Subject: - dtucker@cvs.openbsd.org 2007/02/21 11:00:05 X-Git-Tag: V_4_6_P1~15 X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/commitdiff_plain/1e823acf1b3da715bf5bf700ac5d3b94fbe5a8c6 - 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. --- diff --git a/ChangeLog b/ChangeLog index b06c2873..fd20502e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,13 @@ [clientloop.c] set maximum packet and window sizes the same for multiplexed clients 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 - (dtucker) OpenBSD CVS Sync diff --git a/sshd.c b/sshd.c index 4aa1c98e..0a76f2d3 100644 --- a/sshd.c +++ b/sshd.c @@ -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 * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -305,6 +305,7 @@ sighup_restart(void) logit("Received SIGHUP; restarting."); close_listen_socks(); close_startup_pipes(); + alarm(0); /* alarm timer persists across exec */ execv(saved_argv[0], saved_argv); logit("RESTART FAILED: av[0]='%.100s', error: %.100s.", saved_argv[0], strerror(errno));