|
Message-Id: <20190701034428.62764-1-samuel@sholland.org> Date: Sun, 30 Jun 2019 22:44:28 -0500 From: Samuel Holland <samuel@...lland.org> To: musl@...ts.openwall.com Cc: Samuel Holland <samuel@...lland.org> Subject: [PATCH] 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. --- src/process/fork.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/process/fork.c b/src/process/fork.c index 11286ef4..fb42478a 100644 --- a/src/process/fork.c +++ b/src/process/fork.c @@ -28,6 +28,7 @@ pid_t fork(void) self->robust_list.off = 0; self->robust_list.pending = 0; self->next = self->prev = self; + __thread_list_lock = 0; libc.threads_minus_1 = 0; } __restore_sigs(&set); -- 2.21.0
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.