From 271f4a13f56029350b7fd17659a03d9489cb97f7 Mon Sep 17 00:00:00 2001 From: djm Date: Mon, 19 May 2008 06:05:41 +0000 Subject: [PATCH] - markus@cvs.openbsd.org 2008/05/09 16:17:51 [channels.c] error-fd race: don't enable the error fd in the select bitmask for channels with both in- and output closed, since the channel will go away before we call select(); report, lots of debugging help and ok djm@ --- ChangeLog | 6 ++++++ channels.c | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 76519a6f..0c9e56a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -127,6 +127,12 @@ a SIGPIPE when the forked program does a write. ok djm@ (Id sync only, USE_PIPES never left portable OpenSSH) + - markus@cvs.openbsd.org 2008/05/09 16:17:51 + [channels.c] + error-fd race: don't enable the error fd in the select bitmask + for channels with both in- and output closed, since the channel + will go away before we call select(); + report, lots of debugging help and ok djm@ 20080403 - (djm) [openbsd-compat/bsd-poll.c] Include stdlib.h to avoid compile- diff --git a/channels.c b/channels.c index 1e57951d..99b23d75 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.276 2008/05/09 04:55:56 djm Exp $ */ +/* $OpenBSD: channels.c,v 1.277 2008/05/09 16:17:51 markus Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -819,7 +819,8 @@ channel_pre_open(Channel *c, fd_set *readset, fd_set *writeset) } } /** XXX check close conditions, too */ - if (compat20 && c->efd != -1) { + if (compat20 && c->efd != -1 && + !(c->istate == CHAN_INPUT_CLOSED && c->ostate == CHAN_OUTPUT_CLOSED)) { if (c->extended_usage == CHAN_EXTENDED_WRITE && buffer_len(&c->extended) > 0) FD_SET(c->efd, writeset); -- 2.45.2