diff options
author | Florian Weimer <fweimer@redhat.com> | 2021-09-23 09:55:54 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2021-09-23 09:56:07 +0200 |
commit | 2849e2f53311b66853cb5159b64cba2bddbfb854 (patch) | |
tree | 24a4ff2579b422e3689d254bfeb297ec8cf9a08b /sysdeps/alpha/strchr.S | |
parent | b3f27d8150d4f3c64063a9a257ec1d228de66398 (diff) | |
download | glibc-2849e2f53311b66853cb5159b64cba2bddbfb854.tar.gz glibc-2849e2f53311b66853cb5159b64cba2bddbfb854.tar.xz glibc-2849e2f53311b66853cb5159b64cba2bddbfb854.zip |
nptl: Avoid setxid deadlock with blocked signals in thread exit [BZ #28361]
As part of the fix for bug 12889, signals are blocked during thread exit, so that application code cannot run on the thread that is about to exit. This would cause problems if the application expected signals to be delivered after the signal handler revealed the thread to still exist, despite pthread_kill can no longer be used to send signals to it. However, glibc internally uses the SIGSETXID signal in a way that is incompatible with signal blocking, due to the way the setxid handshake delays thread exit until the setxid operation has completed. With a blocked SIGSETXID, the handshake can never complete, causing a deadlock. As a band-aid, restore the previous handshake protocol by not blocking SIGSETXID during thread exit. The new test sysdeps/pthread/tst-pthread-setuid-loop.c is based on a downstream test by Martin Osvald. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'sysdeps/alpha/strchr.S')
0 files changed, 0 insertions, 0 deletions