From nobody Fri Jul 26 11:04:35 2024 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4WVlJM2df0z5Rvs1; Fri, 26 Jul 2024 11:04:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4WVlJM1vK7z4XCN; Fri, 26 Jul 2024 11:04:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1721991875; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Pkb3lQxZutLQcI9SI51WO3f8dy0GzRPqHdc6446aY9Q=; b=uyC/vH1+RmcUxYeBMccu5xG+DE/DDNjKkEEumHoMjWOVxtb2s9dhwE95Z/5uAWjYPa+XIV zYo3Egwj1FqEZLM2XfvVSis9/oaUACD2MPiRyXyGHR3oHXvBGxvWuutrx2wXvAHgb04Ycr 3p2ZKuGndFrQG9YExS6FGTLB78dD4Jn0NKu34mG5uM+9r3UdMLDxU/xSZVT6u6HtwNb/x2 58T5M5it8lrZP8bxUIWVdmdEq4M/uhDi/bpdWhLDdTCeZsDeGWRRXqYPBuPUwNm5vyi4so 4B924dC6htVmrVxixTEwQjl281P9Wl4vlub/XCBLVN14HM8th4NcolBgfqf/XQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1721991875; a=rsa-sha256; cv=none; b=QkfLshZDyuSfRaocJjUSQPtK91OFHOMbZHHoReuTBYk3sOF9mGjRJ0DgvPqR3LprJLEM8y jWJmPCAyeFO9BqlBAfN2sDKA/Z8rAAO/oO6EYwql0tzkI+Ay2f99sioRhQ3hYZv/m+Ag87 N+UAi8jW+3t7jZj1C+9Va4b7lBTZxB5ZVnuh5ACWPoOJ1+jaqUXlwCgwiLtlcFM+dCVXFo EwPdRccsvjpXkU0UIPGvgoG5TZDL7aJ/sKYTnWGuxRIiJOWngxz2MYi7pNva4rKg5FX2Pt 1uLKzM352bxxln9JGF4hArnopjV8fS8Ky7TmcXydnbZWFDnvVBZMhKji0Z2ZSw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1721991875; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Pkb3lQxZutLQcI9SI51WO3f8dy0GzRPqHdc6446aY9Q=; b=HVFb03gmIQxK6XggEeU4VngHCnWLkio1zPtS4mx+1aQy6FE6/SnmRqSLo5nhCM6ReUkCA7 RLNE+nGYdK9vZ6qh5tvqKMq2v3NXgyKo7+TQSjNcFmkdWmg1mCYT1MjxCqFz4zWZixiCR0 NpB1kNKI7lfCVYaDkRTlLOAqKMRrzFn0X9H7h7fr6WnJefFOrfL3PrCGfAjcCMy7os72PO wqWXbTIZIQRTLOo8CPQTG3InwBnLWdvG2p0oRkXxS4+0nu/RJKQs2G2IG2S+MdzGNK8604 zApXb9KRl6sq92dFm6GknSsUBAY5FXNJ2yIoFqMEG5ZHl100Gh36zVLiRZ0nKQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4WVlJM1NgpzLT5; Fri, 26 Jul 2024 11:04:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 46QB4Z6v019653; Fri, 26 Jul 2024 11:04:35 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 46QB4ZUT019650; Fri, 26 Jul 2024 11:04:35 GMT (envelope-from git) Date: Fri, 26 Jul 2024 11:04:35 GMT Message-Id: <202407261104.46QB4ZUT019650@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: c179937b986e - main - libc/getnameinfo: stop adding NI_NUMERICHOST where inappropriate List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c179937b986ec3959d89bfeb8eed0a6f58a28649 Auto-Submitted: auto-generated The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=c179937b986ec3959d89bfeb8eed0a6f58a28649 commit c179937b986ec3959d89bfeb8eed0a6f58a28649 Author: Bjoern A. Zeeb AuthorDate: 2024-06-10 11:34:25 +0000 Commit: Bjoern A. Zeeb CommitDate: 2024-07-26 11:03:56 +0000 libc/getnameinfo: stop adding NI_NUMERICHOST where inappropriate Checking the first nibble of the IPv6 address to be 0 and then excluding two well known cases (v4-mapped, loopback) leaves us with more cases where the first nibble could be 0, e.g., the RFC 6052, 2.1 Well-Known Prefix 64:ff9b::/96. It is not practical to track them all and it is not clear what lead to this special casing originally, so remove them. While here also remove the IN6_IS_ADDR_LINKLOCAL() + NI_NUMERICHOST case as link-local address resolution does exist. We do leave the IN6_IS_ADDR_MULTICAST() case for now as I could not find any references to any official reverse lookups for these. Adding comments for more case (and some historic behaviour) in order to make it easier to follow the logic. PR: 279618 Fixes: 6cb9418289f90 MFC after: 6 weeks Reviewed by: hrs Differential Revision: https://reviews.freebsd.org/D45547 --- lib/libc/net/getnameinfo.c | 54 +++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/lib/libc/net/getnameinfo.c b/lib/libc/net/getnameinfo.c index 7ab490abb67f..01bceaa98fce 100644 --- a/lib/libc/net/getnameinfo.c +++ b/lib/libc/net/getnameinfo.c @@ -229,24 +229,44 @@ getnameinfo_inet(const struct afd *afd, case AF_INET6: { const struct sockaddr_in6 *sin6; + sin6 = (const struct sockaddr_in6 *)sa; - switch (sin6->sin6_addr.s6_addr[0]) { - case 0x00: - if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) - ; - else if (IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr)) - ; - else - flags |= NI_NUMERICHOST; - break; - default: - if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) { - flags |= NI_NUMERICHOST; - } - else if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) - flags |= NI_NUMERICHOST; - break; - } + + /* + * https://pubs.opengroup.org/onlinepubs/9699919799/functions/getnameinfo.html + * "[IP6] [Option Start] If the socket address structure + * contains an IPv4-mapped IPv6 address or an IPv4-compatible + * IPv6 address, the implementation shall extract the embedded + * IPv4 address and lookup the node name for that IPv4 address. + * [Option End]" + * => getipnodebyaddr() handles this case for us. + * => in case of NI_NUMERICHOST being set, inet_ntop[6] will + * handle it too. + * + * "If the address is the IPv6 unspecified address ( "::" ), + * a lookup shall not be performed and the behavior shall be + * the same as when the node's name cannot be located." + * => getipnodebyaddr() handles this case for us. + * => in case of NI_NUMERICHOST being set, + * ip6_parsenumeric() -> inet_ntop[6] will handle it too. + */ + + /* + * We used to exclude link-local from lookups. + * Even though calles in the resolver chain may not (yet) + * properly deal with them, we no longer do as for link-local + * there is a path to resolve these. See: + * RFC 6303 4.5. IPv6 Link-Local Addresses + * RFC 6762 4. Reverse Address Mapping + * + * XXX For IPv6 MC the only reference found was + * https://www.ietf.org/archive/id/draft-michaelson-as112-ipv6-02.html + * but there are also no "empty zone"s for x.0.f.f.ip6.arpa + * in DNS servers. Keep catching it here for now and + * do not attempt name resolution but return the address string. + */ + if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) + flags |= NI_NUMERICHOST; } break; #endif