4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-03-02 13:05:42 +08:00
Takashi Yano 3b4f6217c3 Cygwin: pty: Fix thread safety of readahead buffer handling in pty master.
Previously, though readahead buffer handling in pty master was not
fully thread-safe, accept_input() was called from peek_pipe() thread
in select.cc. This caused the problem reported in:
https://cygwin.com/pipermail/cygwin/2023-July/253984.html

The mechanism of the problem is:
1) accept_input() which is called from peek_pipe() thread calls
   eat_readahead(-1) before reading readahead buffer. This allows
   writing to the readahead buffer from another (main) thread.
2) The main thread calls fhandler_pty_master::write() just after
   eat_readahead(-1) was called and before reading the readahead
   buffer by accept_input() called from peek_pipe() thread. This
   overwrites the readahead buffer.
3) The read result from readahead buffer which was overwritten is
   sent to the slave.

This patch makes readahead buffer handling fully thread-safe using
input_mutex to resolve this issue.

Fixes: 7b03b0d8cee0 ("select.cc (peek_pipe): Call flush_to_slave whenever we're checking for a pty master.")
Reported-by: Thomas Wolff <towo@towo.net>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2023-08-04 17:49:29 +09:00
..
2022-08-04 20:54:09 +02:00
2021-11-10 20:16:15 -05:00
2022-08-04 22:13:59 +02:00
2022-08-04 22:13:59 +02:00
2021-04-27 16:49:56 +01:00
2023-02-25 16:12:51 +01:00
2022-08-04 22:13:59 +02:00
2021-11-15 19:32:23 -05:00
2022-08-04 15:16:48 +02:00
2022-05-29 17:45:52 -04:00
2021-06-26 15:24:27 +01:00
2022-05-29 17:45:52 -04:00
2022-08-04 22:13:59 +02:00
2022-05-29 17:45:52 -04:00
2022-08-04 22:13:59 +02:00
2022-08-04 22:13:59 +02:00
2022-05-29 17:45:52 -04:00
2022-05-29 17:45:52 -04:00
2022-08-04 22:13:59 +02:00
2022-12-07 21:18:24 +01:00
2022-05-29 17:45:52 -04:00
2022-08-04 22:13:59 +02:00
2022-08-04 22:13:59 +02:00