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=-3.3 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 29903 invoked from network); 20 Jul 2023 17:30:56 -0000 Received: from second.openwall.net (193.110.157.125) by inbox.vuxu.org with ESMTPUTF8; 20 Jul 2023 17:30:56 -0000 Received: (qmail 22509 invoked by uid 550); 20 Jul 2023 17:30:53 -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 22474 invoked from network); 20 Jul 2023 17:30:52 -0000 Date: Thu, 20 Jul 2023 13:30:43 -0400 From: Rich Felker To: Alexey Izbyshev Cc: musl@lists.openwall.com Message-ID: <20230720173042.GP4163@brightrain.aerifal.cx> References: <953a6adcee154977b4695bb9e485225c@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [musl] [PATCH] set tid address in fork On Thu, Jul 20, 2023 at 05:22:07PM +0300, Alexey Izbyshev wrote: > On 2023-07-20 16:53, changdiankang wrote: > >In pthrad_exit the exiting thread will hold the thread list lock, > >and will unlock it in kernel by clear the tid address > >&__thread_list_lock. > > > >A thread created by pthrad_create is created with clone syscall with > >CLONE_CHILD_CLEARTID flag and &__thread_list_lock as child_tid > >parameter. When the thread exits, the thread list lock can be woke up > >(see man clone CLONE_CHILD_CLEARTID). > > > >But in fork, the main thread is created with fork syscall or with > >clone syscall without CLONE_CHILD_CLEARTID flag. The > >&__thread_list_lock > >is not be set to tid address. So when the main thread exits, the thread > >list lock can't be woke up by kernel. This may lead some problems when > >other child threads try to hold this lock. For example, a child thread > >blocks at waiting thread list lock when joining the main thread. > > > >To fix this issue, we should set &__thread_list_lock to the main > >thread tid > >address in fork. > > This bug has already been discovered, see > https://www.openwall.com/lists/musl/2023/06/01/9. Yes, and the fix is in an unpushed commit. Sorry! I'll review queue and push in a bit. Rich