|author||Samuel Holland <firstname.lastname@example.org>||2019-06-30 22:44:28 -0500|
|committer||Rich Felker <email@example.com>||2019-07-01 10:10:52 -0400|
fix deadlock in synccall after threaded fork
synccall may be called by AS-safe functions such as setuid/setgid after fork. although fork() resets libc.threads_minus_one, causing synccall to take the single-threaded path, synccall still takes the thread list lock. This lock may be held by another thread if for example fork() races with pthread_create(). After fork(), the value of the lock is meaningless, so clear it. maintainer's note: commit 8f11e6127fe93093f81a52b15bb1537edc3fc8af and e4235d70672d9751d7718ddc2b52d0b426430768 introduced this regression. the state protected by this lock is the linked list, which is entirely replaced in the child path of fork (next=prev=self), so resetting it is semantically sound.
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions