From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 4241 invoked from network); 8 Oct 2022 17:03:39 -0000 Received: from second.openwall.net (193.110.157.125) by inbox.vuxu.org with ESMTPUTF8; 8 Oct 2022 17:03:39 -0000 Received: (qmail 3652 invoked by uid 550); 8 Oct 2022 17:03:35 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 3614 invoked from network); 8 Oct 2022 17:03:35 -0000 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.ispras.ru C2D9340737A7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ispras.ru; s=default; t=1665248604; bh=A7Q9ifiVCKDSgypvMQFogxhbbDw3HTQb4M9rwotsOnk=; h=Date:From:To:Subject:Reply-To:In-Reply-To:References:From; b=s8WLhMzoimvM1QPH2LyfoBxNNmYMyhGFxyQ8N6tyVM4JBj1n1QKqasQ7aY9FUHa5y PVWDWUpeaHzBi4OaNM5w/ZICJ9iBm2t08T+qtMBV/+qtZw0WpqcZHPQw6oGjXuYJ0R Gm90NVH6dxd9Bgc/Gn8cKUMncJfaxaI0B2W/WtIw= MIME-Version: 1.0 Date: Sat, 08 Oct 2022 20:03:24 +0300 From: Alexey Izbyshev To: musl@lists.openwall.com Mail-Followup-To: musl@lists.openwall.com In-Reply-To: <20221008013615.GE29905@brightrain.aerifal.cx> References: <033092a85a52d9f8e8d73a235e2381ae@ispras.ru> <20221006182151.GV29905@brightrain.aerifal.cx> <20221008013615.GE29905@brightrain.aerifal.cx> User-Agent: Roundcube Webmail/1.4.4 Message-ID: <7c781fb1944200ba72ed381b5635fd31@ispras.ru> X-Sender: izbyshev@ispras.ru Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [musl] MT fork and key_lock in pthread_key_create.c On 2022-10-08 04:36, Rich Felker wrote: > On Thu, Oct 06, 2022 at 02:21:51PM -0400, Rich Felker wrote: >> On Thu, Oct 06, 2022 at 09:37:50AM +0300, Alexey Izbyshev wrote: >> > Hi, >> > >> > I noticed that fork() doesn't take key_lock that is used to protect >> > the global table of thread-specific keys. I couldn't find mentions >> > of this lock in the MT fork discussion in the mailing list archive. >> > Was this lock overlooked? >> >> I think what happened was that we made the main list of locks to >> review and take care of via grep for LOCK, and then manually added >> known instances of locks using other locking primitives. This one must >> have been missed. >> >> Having special-case lock types like this is kinda a pain, but as long >> as there aren't too many I guess it's not a big deal. > > Proposed patch attached. diff --git a/src/internal/fork_impl.h b/src/internal/fork_impl.h index ae3a79e5..354e733b 100644 --- a/src/internal/fork_impl.h +++ b/src/internal/fork_impl.h @@ -16,3 +16,4 @@ extern hidden volatile int *const __vmlock_lockptr; hidden void __malloc_atfork(int); hidden void __ldso_atfork(int); +hidden void __pthread_key_atfork(int); diff --git a/src/process/fork.c b/src/process/fork.c index 80e804b1..56f19313 100644 --- a/src/process/fork.c +++ b/src/process/fork.c @@ -37,6 +37,7 @@ static void dummy(int x) { } weak_alias(dummy, __fork_handler); weak_alias(dummy, __malloc_atfork); weak_alias(dummy, __aio_atfork); +weak_alias(dummy, __pthread_key_atfork); weak_alias(dummy, __ldso_atfork); static void dummy_0(void) { } @@ -51,6 +52,7 @@ pid_t fork(void) int need_locks = libc.need_locks > 0; if (need_locks) { __ldso_atfork(-1); + __pthread_key_atfork(-1); __aio_atfork(-1); __inhibit_ptc(); for (int i=0; i