diff options
author | dtucker <dtucker> | 2005-07-14 07:05:51 +0000 |
---|---|---|
committer | dtucker <dtucker> | 2005-07-14 07:05:51 +0000 |
commit | a0904945438caf7ec6824871e8f18d98ba0ff226 (patch) | |
tree | 16ecbeaa489baddebbc929b697b6b9c7f3395ed3 /channels.h | |
parent | da1a79963123cd0fff207cfa66e5cb749616d532 (diff) | |
download | openssh-a0904945438caf7ec6824871e8f18d98ba0ff226.tar.gz |
- 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
Diffstat (limited to 'channels.h')
-rw-r--r-- | channels.h | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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 <ylo@cs.hut.fi> @@ -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 */ |