4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-23 17:19:33 +08:00
Takashi Yano 26144e4008 Cygwin: sigtimedwait: Fix segfault when timeout is used
Previously, two bugs exist in sigtimedwait(). One is, that since
_my_tls.sigwait_mask was left non-zero if the signal arrives after
the timeout, sigpacket::process() would wrongly try to handle it.
The other is if a timeout occurs after sigpacket::process() is
called, but not completed yet, the signal handler can be called
accidentally. If the signal handler is set to SIG_DFL or SIG_IGN,
access violation will occur in both cases.

With this patch, in sigwait_common(), check if sigwait_mask == 0
to confirm that sigpacket::process() cleared it. In this case,
do not treat WAIT_TIMEOUT, but call cygwait() again to retrieve
the signal. Furthermore, sigpacket::process() checks whether
timeout occurs in sigwait_common() and if timeout already happens,
do not treat the signal as waited. In both cases, to avoid race
issues, the code is guarded by cygtls::lock().

Addresses: https://cygwin.com/pipermail/cygwin/2024-November/256762.html
Fixes: 24ff42d79aab ("Cygwin: Implement sigtimedwait")
Reported-by: Christian Franke <Christian.Franke@t-online.de>
Reviewed-by: Corinna Vinschen <corinna@vinschen.de>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2024-11-22 19:27:29 +09:00

48 lines
1.9 KiB
Groff

Fixes:
------
- Fix undesired behaviour of console master thread in win32-input-mode
which is supported by Windows Termainal.
Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256380.html
- Fix a regression in 3.5.4 that writing to pipe extremely slows down.
Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256398.html
- Fix pread() and pwrite() EBADF error after fork().
Addresses: https://sourceware.org/pipermail/cygwin/2024-September/256468.html
- Fix timer_delete() return value which always indicated failure.
- Fix lockf() error which occurs when adding a new lock over multiple
locks.
Addresses: https://cygwin.com/pipermail/cygwin/2024-October/256528.html
- Make lockf() return ENOLCK when the number of locks exceeds
MAX_LOCKF_CNT rather than printing a warning message.
Addresses: https://cygwin.com/pipermail/cygwin/2024-October/256528.html
- Make console inherit hand over of pseudo console ownership from
parent pty.
Addresses: https://cygwin.com/pipermail/cygwin/2024-February/255388.html
- Restore pipe blocking mode for non-cygwin apps.
Addresses: https://github.com/git-for-windows/git/issues/5115
- Fix a problem that signal handler destroys the FPU context.
Addresses: https://cygwin.com/pipermail/cygwin/2024-October/256503.html
- Fix type of pthread_sigqueue() first parameter to match Linux.
Addresses: https://cygwin.com/pipermail/cygwin/2024-September/256439.html
- Fix potential stack corruption in rmdir() in a border case.
Addresses: https://cygwin.com/pipermail/cygwin/2024-November/256774.html
- Fix access violation in lf_clearlock() called from flock().
Addresses: https://cygwin.com/pipermail/cygwin/2024-November/256750.html
- Fix NtCreateEvent() error in create_lock_ob() called from flock().
Addresses: https://cygwin.com/pipermail/cygwin/2024-November/256750.html
- Fix segfault in sigtimedwait() when using timeout.
Addresses: https://cygwin.com/pipermail/cygwin/2024-November/256762.html