From nobody Sat Sep 28 21:52:11 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 4XGLf35ZXZz5Xtcf; Sat, 28 Sep 2024 21:52:11 +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 4XGLf356tcz44QM; Sat, 28 Sep 2024 21:52:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1727560331; 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=f7JcX1nxkQnCj12J8qZF95cUikg+kEvbRs+Edo8hDQI=; b=NM7vGQVFIthi8LnljmLyXvGMGhBDNGeU49UBDgf57y1VmJ2rWH3EtEbW52VlYb3q4DCxF1 T6MsBVfFeROZM4iYNpsqonO5ETZjZOfW41YLUshf5P9m0sETvReHqGdNd5F4dC3lDP6+Tx rZ5IOuAbbtKM81/kA7Vtlx7eIcxKYSOMIl+dGMewXEFyivPGi7yy50Y55BEbip3r+AgG5Q K84QED593DkL6erFWXNszOqwAczKlaXGFBplfDaZVoZk363Yuou6reEQCC71S6fFqbvuEC 2jiGYJb1+d8A3wLKF8fDHS7kPQyGzcHMtXGPy/E/zEWpDgXrs9DrxPXduKvWrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1727560331; 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=f7JcX1nxkQnCj12J8qZF95cUikg+kEvbRs+Edo8hDQI=; b=VL8kvJt5TYMi75PDBBAkytw6ss6Q5A/VGQGAgl7TNSAWlD9Q7vzqUUbeLrKuvL3vjBRiON ofZlH5gbQC2ZP1DDKwyR2antTZ1P64jfpZjNrna3TY/QJBEWW4fAOUlU7D10G2i53L44OE 9wpbf33Mi2+3xrpcNFf+F3++KSp0lF35FDPTS5YDbBN8ONReSM5FqS7J25QfBFWJqMPxhY 9u43haQex71avKN5iOkQu2X7hzdbDtbNdFOo2uK5e2g1B7mZ7BRyUopTX2M+SpZzowUcnB m0NjHHnZNL5ojz3UD95reWi+KkUjRt2xKBw9S9dXXvQMdeP/dq+KpzzVBgansQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1727560331; a=rsa-sha256; cv=none; b=FL2kGUVPC7Wz/60inqG9AByOcw2CNcGUKt5Rnc4+6VhbX7aFH/AOtUZfFwjVhWpB7S87LW c8scXsKs0jhd626hpfXIariIXlBeA+oGVLQI8szi1JOCNJrBBXacBvj5bhmJGI4yAv+I1E KM8k1j87lx4bzHsXlG5Z3PbbVJwJ4Z9qp6ye1AbrJwgpUe1qIpsXUYzN8sHWdx5DPydTET N8QLa9dO6aTG9uLQIx6BzM+roVtsZUfYIVFcgBNDS3rPjeah/cHLUs/1GSLQ9USVPblMGr HN3pweCrfehUtRW8Zf4ffUm7I4nBXFy8l/mc5+Gut4MimYrCO+C2gxEfo5vKyA== 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 4XGLf34ksczjLF; Sat, 28 Sep 2024 21:52:11 +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 48SLqBpL051208; Sat, 28 Sep 2024 21:52:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 48SLqBfX051205; Sat, 28 Sep 2024 21:52:11 GMT (envelope-from git) Date: Sat, 28 Sep 2024 21:52:11 GMT Message-Id: <202409282152.48SLqBfX051205@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: e131c310c697 - stable/13 - 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/stable/13 X-Git-Reftype: branch X-Git-Commit: e131c310c697aea2106728a7619cd0d41ba0d9ff Auto-Submitted: auto-generated The branch stable/13 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=e131c310c697aea2106728a7619cd0d41ba0d9ff commit e131c310c697aea2106728a7619cd0d41ba0d9ff Author: Bjoern A. Zeeb AuthorDate: 2024-06-10 11:34:25 +0000 Commit: Bjoern A. Zeeb CommitDate: 2024-09-28 11:07:44 +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 Reviewed by: hrs Differential Revision: https://reviews.freebsd.org/D45547 (cherry picked from commit c179937b986ec3959d89bfeb8eed0a6f58a28649) --- 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 7ef7fe64e961..fcd9c71051d6 100644 --- a/lib/libc/net/getnameinfo.c +++ b/lib/libc/net/getnameinfo.c @@ -230,24 +230,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