[PATCH] Cygwin: console: Fix segfault on shared_console_info access.

Corinna Vinschen corinna-cygwin@cygwin.com
Fri Feb 21 19:43:00 GMT 2020


Hi Takashi,

On Feb 22 04:10, Takashi Yano wrote:
> - Accessing shared_console_info accidentaly causes segmentation
>   fault when it is a NULL pointer. The cause of the problem reported
>   in https://cygwin.com/ml/cygwin/2020-02/msg00197.html is this NULL
>   pointer access in request_xterm_mode_output(). This patch fixes
>   the issue.

When does this occur?  I guess this is during initialization.  Is it
really necessary to switch to xterm mode at all at that time?  If not,
it might be simpler to just

-  if (con_is_legacy)
+  if (con_is_legacy || !shared_console_info)

at the start of the functions and only switch to xterm mode when
fully up and running.

> ---
>  winsup/cygwin/fhandler_console.cc | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
> index 42040a971..e298dd60c 100644
> --- a/winsup/cygwin/fhandler_console.cc
> +++ b/winsup/cygwin/fhandler_console.cc
> @@ -256,7 +256,8 @@ fhandler_console::request_xterm_mode_input (bool req)
>      return;
>    if (req)
>      {
> -      if (InterlockedIncrement (&con.xterm_mode_input) == 1)
> +      if (!shared_console_info ||
> +	  InterlockedIncrement (&con.xterm_mode_input) == 1)

Btw., that should be

         if (!shared_console_info
	     || InterlockedIncrement (&con.xterm_mode_input) == 1)

Note the position of the ||


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20200221/d9e34953/attachment.sig>


More information about the Cygwin-patches mailing list