upstream commit

Only call close once in confree().  ssh_packet_close will
close the FD so only explicitly close non-SSH channels.  bz#2734, from
bagajjal at microsoft.com, ok djm@

Upstream-ID: a81ce0c8b023527167739fccf1732b154718ab02
This commit is contained in:
dtucker@openbsd.org 2017-06-30 04:17:23 +00:00 committed by Damien Miller
parent 197dc9728f
commit d79bceb931

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ssh-keyscan.c,v 1.114 2017/05/31 07:00:13 markus Exp $ */ /* $OpenBSD: ssh-keyscan.c,v 1.115 2017/06/30 04:17:23 dtucker Exp $ */
/* /*
* Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>. * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>.
* *
@ -390,7 +390,6 @@ confree(int s)
{ {
if (s >= maxfd || fdcon[s].c_status == CS_UNUSED) if (s >= maxfd || fdcon[s].c_status == CS_UNUSED)
fatal("confree: attempt to free bad fdno %d", s); fatal("confree: attempt to free bad fdno %d", s);
close(s);
free(fdcon[s].c_namebase); free(fdcon[s].c_namebase);
free(fdcon[s].c_output_name); free(fdcon[s].c_output_name);
if (fdcon[s].c_status == CS_KEYS) if (fdcon[s].c_status == CS_KEYS)
@ -401,7 +400,8 @@ confree(int s)
ssh_packet_close(fdcon[s].c_ssh); ssh_packet_close(fdcon[s].c_ssh);
free(fdcon[s].c_ssh); free(fdcon[s].c_ssh);
fdcon[s].c_ssh = NULL; fdcon[s].c_ssh = NULL;
} } else
close(s);
TAILQ_REMOVE(&tq, &fdcon[s], c_link); TAILQ_REMOVE(&tq, &fdcon[s], c_link);
FD_CLR(s, read_wait); FD_CLR(s, read_wait);
ncon--; ncon--;