]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
- djm@cvs.openbsd.org 2011/01/16 11:50:05
authorDamien Miller <djm@mindrot.org>
Sun, 16 Jan 2011 12:16:53 +0000 (23:16 +1100)
committerDamien Miller <djm@mindrot.org>
Sun, 16 Jan 2011 12:16:53 +0000 (23:16 +1100)
     [clientloop.c]
     Use atomicio when flushing protocol 1 std{out,err} buffers at
     session close. This was a latent bug exposed by setting a SIGCHLD
     handler and spotted by kevin.brott AT gmail.com; ok dtucker@

ChangeLog
clientloop.c

index 1266e99844e1c9bc63811cd212b53b43ed0ba1a2..7012e620ee0178fb08452abe759cca21e7c7022c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,12 @@
 20110116
  - (dtucker) [Makefile.in configure.ac regress/kextype.sh] Skip sha256-based
    on configurations that don't have it.
+ - OpenBSD CVS Sync
+   - djm@cvs.openbsd.org 2011/01/16 11:50:05
+     [clientloop.c]
+     Use atomicio when flushing protocol 1 std{out,err} buffers at
+     session close. This was a latent bug exposed by setting a SIGCHLD
+     handler and spotted by kevin.brott AT gmail.com; ok dtucker@
 
 20110114
  - OpenBSD CVS Sync
index c60b758c7812fec39e6cb9fc98f8bbe5df8e8ebb..325657ba29b9926dcd71790f3a4a6f487c653ce9 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: clientloop.c,v 1.229 2011/01/11 06:13:10 djm Exp $ */
+/* $OpenBSD: clientloop.c,v 1.230 2011/01/16 11:50:05 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1591,9 +1591,9 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
 
        /* Output any buffered data for stdout. */
        while (buffer_len(&stdout_buffer) > 0) {
-               len = write(fileno(stdout), buffer_ptr(&stdout_buffer),
-                   buffer_len(&stdout_buffer));
-               if (len <= 0) {
+               len = atomicio(vwrite, fileno(stdout),
+                   buffer_ptr(&stdout_buffer), buffer_len(&stdout_buffer));
+               if (len != buffer_len(&stdout_buffer)) {
                        error("Write failed flushing stdout buffer.");
                        break;
                }
@@ -1602,9 +1602,9 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
 
        /* Output any buffered data for stderr. */
        while (buffer_len(&stderr_buffer) > 0) {
-               len = write(fileno(stderr), buffer_ptr(&stderr_buffer),
-                   buffer_len(&stderr_buffer));
-               if (len <= 0) {
+               len = atomicio(vwrite, fileno(stderr),
+                   buffer_ptr(&stderr_buffer), buffer_len(&stderr_buffer));
+               if (len != buffer_len(&stderr_buffer)) {
                        error("Write failed flushing stderr buffer.");
                        break;
                }