|
|
Message-ID: <20230601201659.GN4163@brightrain.aerifal.cx>
Date: Thu, 1 Jun 2023 16:17:01 -0400
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: [PATCH] [v2] make clone() usable
On Thu, Jun 01, 2023 at 04:08:07PM -0400, Rich Felker wrote:
> On Thu, Jun 01, 2023 at 01:12:57PM +0300, Alexey Izbyshev wrote:
> > On 2023-05-31 02:35, Rich Felker wrote:
> > >As discussed before (see the 2021 thread "Incorrect thread TID
> > >caching") clone() has been effectively unusable because it produces a
> > >child process in invalid state, with wrong tid in its thread
> > >structure, among other problems.
> > >
> > >The attached proposed patch attempts to make clone() usable by having
> > >it share the _Fork logic for establishing a consistent process state
> > >after forking, and also blocks use of flags which produce invalid
> > >state.
> > >
> > Tangentially, while thinking about this, I realized that because the
> > kernel clears the address of the exit futex on clone and _Fork
> > doesn't re-establish it, the following blocks forever:
> >
> > void *thr(void *arg) {
> > // Blocks in __tl_sync because __thread_list_lock is never
> > unlocked
> > pthread_join(*(pthread_t *)arg, NULL));
> > return NULL;
> > }
> >
> > int main() {
> > if (!fork()) {
> > static pthread_t pt;
> > pt = pthread_self();
> > pthread_create(&(pthread_t){0}, NULL, thr, &pt);
> > pthread_exit(NULL);
> > }
> > wait(NULL);
> > }
> >
> > This could be fixed by the following change in _Fork.c:
> >
> > - self->tid = __syscall(SYS_gettid);
> > + self->tid = __syscall(SYS_set_tid_address,
> > &__thread_list_lock);
>
> Wow, I had no idea Linux's fork cleared the exit futex address. That's
> a big bug we've had around for nobody to have noticed...
Updated version with this fixed and checking for null stack.
View attachment "0001-fix-broken-thread-list-unlocking-after-fork.patch" of type "text/plain" (1107 bytes)
View attachment "0002-fix-public-clone-function-to-be-safe-and-usable-by-a.patch" of type "text/plain" (5781 bytes)
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.