From patchwork Fri Aug 1 13:28:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Wielaard X-Patchwork-Id: 117450 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 15D8D385842B for ; Fri, 1 Aug 2025 13:39:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 15D8D385842B X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from gnu.wildebeest.org (gnu.wildebeest.org [45.83.234.184]) by sourceware.org (Postfix) with ESMTPS id 6B5063858422 for ; Fri, 1 Aug 2025 13:28:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6B5063858422 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=klomp.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=klomp.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6B5063858422 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=45.83.234.184 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1754054924; cv=none; b=hh8HEiCcZrQO0ebGTLCiBq+ohi7t2OcapxcO/jgcuY56to7PB0MeIEZNv/XurumbN5WrwmIOzJQ+yT60zlic/t8C0kx1yGIffmPj6M++1xoIPEDvnS5RnhWd40F0qXZHdQJA+2JfOFuX8LMxtptbF2pCcEycd2AuU9fk9o5xM+0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1754054924; c=relaxed/simple; bh=pCS+C9k3EU6vnvpLEUX/AVL2ejujC3eubSOlhHXo1xs=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=hq7Td40WAuNzgOUpS4k5bl+jO+vIZVkPBPIRAkqj9STPSIFAr/jeKF4/FMHvyKDt2W5233hunv4tUDz1s+LIC9FvHFwdtU8L9e/ur2K70g6Bp6zBbuhKeLbRbjl+wkmQTSORiPvZxDvZrp/BtRjT2KsJUuDi868Co0WR3pTeQWk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6B5063858422 Received: from r6.localdomain (82-217-174-174.cable.dynamic.v4.ziggo.nl [82.217.174.174]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 1AFA9314136B; Fri, 1 Aug 2025 15:28:43 +0200 (CEST) Received: by r6.localdomain (Postfix, from userid 1000) id 8112F340819; Fri, 01 Aug 2025 15:28:42 +0200 (CEST) From: Mark Wielaard To: libc-alpha@sourceware.org Cc: "Andreas K . Huettel" , Davide Cavalca , Florian Weimer Subject: [PATCH release/2.42/master] stdlib: resolve a double lock init issue after fork [BZ #32994] Date: Fri, 1 Aug 2025 15:28:30 +0200 Message-ID: <20250801132830.4188366-1-mark@klomp.org> X-Mailer: git-send-email 2.50.1 MIME-Version: 1.0 X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org From: Davide Cavalca The __abort_fork_reset_child (introduced in d40ac01cbbc66e6d9dbd8e3485605c63b2178251) call resets the lock after the fork. This causes a DRD regression in valgrind (https://bugs.kde.org/show_bug.cgi?id=503668), as it's effectively a double initialization, despite it being actually ok in this case. As suggested in https://sourceware.org/bugzilla/show_bug.cgi?id=32994#c2 we replace it here with a memcpy of another initialized lock instead, which makes valgrind happy. Reviewed-by: Florian Weimer (cherry picked from commit d9a348d0927c7a1aec5caf3df3fcd36956b3eb23) --- NEWS | 2 +- stdlib/abort.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 9cb8de11f91b..4610b8bbc66b 100644 --- a/NEWS +++ b/NEWS @@ -9,7 +9,7 @@ Version 2.42.1 The following bugs were resolved with this release: - [insert bugs here] + [32994] stdlib: resolve a double lock init issue after fork Version 2.42 diff --git a/stdlib/abort.c b/stdlib/abort.c index caa9e6dc0494..904244a2fb5b 100644 --- a/stdlib/abort.c +++ b/stdlib/abort.c @@ -19,6 +19,7 @@ #include #include #include +#include #include /* Try to get a machine dependent instruction which will make the @@ -42,7 +43,10 @@ __libc_rwlock_define_initialized (static, lock); void __abort_fork_reset_child (void) { - __libc_rwlock_init (lock); + /* Reinitialize lock without calling pthread_rwlock_init, to + avoid a valgrind DRD false positive. */ + __libc_rwlock_define_initialized (, reset_lock); + memcpy (&lock, &reset_lock, sizeof (lock)); } void