|
Message-ID: <20190701141202.GQ1506@brightrain.aerifal.cx> Date: Mon, 1 Jul 2019 10:12:02 -0400 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: [PATCH] fix deadlock in synccall after threaded fork On Sun, Jun 30, 2019 at 10:44:28PM -0500, Samuel Holland wrote: > 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 Thanks! Committing this with a maintainer's note referencing the commits that caused the regression and a further remark on why it's safe/correct to make this change. Rich
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.