From patchwork Tue Oct 7 19:12:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Griffis X-Patchwork-Id: 121445 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 97448385B510 for ; Tue, 7 Oct 2025 19:13:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 97448385B510 Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=igalia.com header.i=@igalia.com header.a=rsa-sha256 header.s=20170329 header.b=Dc6vrehu X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by sourceware.org (Postfix) with ESMTPS id 917FC3858D26 for ; Tue, 7 Oct 2025 19:12:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 917FC3858D26 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=igalia.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 917FC3858D26 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1759864373; cv=none; b=gJvmlhsRyGPy5d3qf1k35xBatGR7AIIpeOPTHJeFokIDYO/9SX+k3ZKWWiHAT8nux0jf1ClfoHSLfZ8g8xfn20SMKGGkuzxRYw2Vs9qfho1wBeF87mBDdpk6uRz8C7zQZBX/I8dI6ruriI/FeTceJMFXWEUSNYLD9bITa0gANEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1759864373; c=relaxed/simple; bh=EZg4PaMsBYC3VysNmzFgi5i5cZAHDZ00Bo05P8wfD8U=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=AQX2xChvju0ZGdj5wEF+aEN9vKa3+IWHPRMGvPUD8TSm1Li3jovlCoihZ3XX5OkM/xHTPrqQIU39bUQ7xbR+YPjuFIO1K8ZjjH3inMF4cA7KZy8FrasBHC1LuJFKo9zhmxkmsGr0orA+4091mmAx71KlWYm4RNEUjHXE4ZS2uRA= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 917FC3858D26 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject: Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=WIzUabQyLyfxVyLH3SedMekWXhztvggDhO/Ff2v1mX0=; b=Dc6vrehuGiJx7a9OMeKC6/QHk9 6sjUSQvnfqsN/D+nqT/eHnWmYqP+Si98G+zMQmYKuHBEZFTwITv7p504nuEqSddo3BQvZUhb/m46L 0OiT1wayWWTQiPQp8mbf1Igag/rBXEcTZ8gmdbZGrwLJEzZNyUtHptO/y60jQRxO/ieZAIMQ2iYhk DYLDSoCiek6LOOgMurXsScN1RSQcpCgo5Bd+49zU7RQVJJLT0d432HgkEk7zpvyOLFW9H2uPeOeo6 eAmj10jcF/grOsloRD2JW8GhPqNBxRF/r2GOdaTqzkudyfJTVPIIxevDwVPFT1YIHo1Zwd1KDjGdL WKOUSDbg==; Received: from [65.128.106.6] (helo=desktop) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1v6D7D-006KUq-K9; Tue, 07 Oct 2025 21:12:52 +0200 From: Patrick Griffis To: libc-alpha@sourceware.org Cc: Patrick Griffis Subject: [PATCH] nss: Use gethostbyname4_r when requesting IPv6 addresses (bug 14413) Date: Tue, 7 Oct 2025 14:12:36 -0500 Message-ID: <20251007191236.1717898-1-pgriffis@igalia.com> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 If getaddrinfo() is called with family of AF_INET6 it would return IPv6 addresses lacking scope_id information. This was a regression caused by bug 14505. That patch avoided calling gethostbyname4_r unless AF_UNSPEC is passed. The reasoning was that gethostbyname4_r has no ability to only ask for a specific family. That is true however gethostbyname3_r returns a list of hostent structs which lack scope_id information. The solution is to always use gethostbyname4_r if IPv6 is requested. This does have the downside of IPv4 addresses being looked up by modules even when they are not needed. --- nss/getaddrinfo.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nss/getaddrinfo.c b/nss/getaddrinfo.c index 6726ace6fd..f448222821 100644 --- a/nss/getaddrinfo.c +++ b/nss/getaddrinfo.c @@ -644,9 +644,12 @@ get_nss_addresses (const char *name, const struct addrinfo *req, no_data = 0; nss_gethostbyname4_r *fct4 = NULL; - /* gethostbyname4_r sends out parallel A and AAAA queries and - is thus only suitable for PF_UNSPEC. */ - if (req->ai_family == PF_UNSPEC) + /* The gethostbyname4_r API is always expected to return both address families + * which means we would prefer gethostbyname3_r when requesting only IPv4 addresses. + * Unfortunately when requesting IPv6 only we have to use this API for link-local + * information (scope_id is not in the hostent struct). + * This means we may collect unncessary IPv4 addresses. */ + if (req->ai_family != PF_INET) fct4 = __nss_lookup_function (nip, "gethostbyname4_r"); if (fct4 != NULL)