From: dtucker Date: Thu, 14 Jul 2005 07:05:51 +0000 (+0000) Subject: - markus@cvs.openbsd.org 2005/07/08 09:41:33 X-Git-Tag: V_4_2_P1~46 X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/commitdiff_plain/cee6ad3db353665da8776c3edde4c9d4706759ce - markus@cvs.openbsd.org 2005/07/08 09:41:33 [channels.h] race when efd gets closed while there is still buffered data: change CHANNEL_EFD_OUTPUT_ACTIVE() 1) c->efd must always be valid AND 2a) no EOF has been seen OR 2b) there is buffered data report, initial fix and testing Chuck Cranor --- diff --git a/ChangeLog b/ChangeLog index c6f01e73..a60ed7fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,14 @@ - dtucker@cvs.openbsd.org 2005/07/08 09:26:18 [misc.c] Make comment match code; ok djm@ + - markus@cvs.openbsd.org 2005/07/08 09:41:33 + [channels.h] + race when efd gets closed while there is still buffered data: + change CHANNEL_EFD_OUTPUT_ACTIVE() + 1) c->efd must always be valid AND + 2a) no EOF has been seen OR + 2b) there is buffered data + report, initial fix and testing Chuck Cranor 20050707 - dtucker [auth-krb5.c auth.h gss-serv-krb5.c] Move KRB5CCNAME generation for diff --git a/channels.h b/channels.h index f87db6af..b89b7c95 100644 --- a/channels.h +++ b/channels.h @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.h,v 1.77 2005/06/16 03:38:36 djm Exp $ */ +/* $OpenBSD: channels.h,v 1.78 2005/07/08 09:41:33 markus Exp $ */ /* * Author: Tatu Ylonen @@ -149,7 +149,7 @@ struct Channel { buffer_len(&c->extended) > 0)) #define CHANNEL_EFD_OUTPUT_ACTIVE(c) \ (compat20 && c->extended_usage == CHAN_EXTENDED_WRITE && \ - ((c->efd != -1 && !(c->flags & (CHAN_EOF_RCVD|CHAN_CLOSE_RCVD))) || \ + c->efd != -1 && (!(c->flags & (CHAN_EOF_RCVD|CHAN_CLOSE_RCVD)) || \ buffer_len(&c->extended) > 0)) /* channel management */