aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2026-01-27 21:29:20 +0000
committerEd Maste <emaste@FreeBSD.org>2026-03-05 19:57:36 +0000
commita1789fa30c0b1e4c20a083c550f0ec2d50e480e4 (patch)
tree1108d8f99c6b5d361f3e2a36811340a407c40c70
parent54bf594851f671e231d2786cdacaf68f290ff738 (diff)
netinet6: Remove support for connecting to IN6ADDR_ANY
RFC4291 section 2.5.2: The unspecified address must not be used as the destination address of IPv6 packets or in IPv6 Routing headers. An IPv6 packet with a source address of unspecified must never be forwarded by an IPv6 router. We disallowed connections to IN6ADDR_ANY by default, as of commit 627e126dbb07 ("netinet6: Disallow connections to IN6ADDR_ANY"). As this is actually disallowed by the RFC, just remove the support. Reported by: bz (in D54306) Reviewed by: bz, glebius Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D54942
-rw-r--r--sys/netinet6/in6_pcb.c19
1 files changed, 2 insertions, 17 deletions
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index 9eb7a59fcf55..d503165979c8 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -113,14 +113,6 @@
#include <netinet6/in6_fib.h>
#include <netinet6/scope6_var.h>
-SYSCTL_DECL(_net_inet6);
-SYSCTL_DECL(_net_inet6_ip6);
-VNET_DEFINE_STATIC(int, connect_in6addr_wild) = 0;
-#define V_connect_in6addr_wild VNET(connect_in6addr_wild)
-SYSCTL_INT(_net_inet6_ip6, OID_AUTO, connect_in6addr_wild,
- CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(connect_in6addr_wild), 0,
- "Allow connecting to the unspecified address for connect(2)");
-
int
in6_pcbsetport(struct in6_addr *laddr, struct inpcb *inp, struct ucred *cred)
{
@@ -396,16 +388,9 @@ in6_pcbladdr(struct inpcb *inp, struct sockaddr_in6 *sin6,
if ((error = sa6_embedscope(sin6, V_ip6_use_defzone)) != 0)
return(error);
- if (V_connect_in6addr_wild && !CK_STAILQ_EMPTY(&V_in6_ifaddrhead)) {
- /*
- * If the destination address is UNSPECIFIED addr,
- * use the loopback addr, e.g ::1.
- */
- if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr))
- sin6->sin6_addr = in6addr_loopback;
- } else if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
+ /* RFC4291 section 2.5.2 */
+ if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr))
return (ENETUNREACH);
- }
if ((error = prison_remote_ip6(inp->inp_cred, &sin6->sin6_addr)) != 0)
return (error);