Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Feb 2026 16:03:58 +0000
From:      Bruce M Simpson <bms@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 79eff4ad64fc - main - netinet6: Return EAFNOSUPPORT for non-IPv6 addresses in mcast sockopts.
Message-ID:  <69909cee.235b6.76aa3a8b@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by bms:

URL: https://cgit.FreeBSD.org/src/commit/?id=79eff4ad64fc445ea78ed733e16482c45dbd5b50

commit 79eff4ad64fc445ea78ed733e16482c45dbd5b50
Author:     Bruce M Simpson <bms@FreeBSD.org>
AuthorDate: 2026-02-14 15:36:47 +0000
Commit:     Bruce M Simpson <bms@FreeBSD.org>
CommitDate: 2026-02-14 16:00:58 +0000

    netinet6: Return EAFNOSUPPORT for non-IPv6 addresses in mcast sockopts.
    
    This is a non-functional change; it just returns the correct errno value
    where IPv6 multicast socket options were passed non-AF_INET6 arguments,
    in preparation for handling PR 193246 with a side-call into netinet as
    xnu currently does.
    
    Reviewed by:    glebius
    Approved by:    glebius
    PR:             193246 (with refinements)
    Differential revision:  https://reviews.freebsd.org/D55233
---
 sys/netinet6/in6_mcast.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/sys/netinet6/in6_mcast.c b/sys/netinet6/in6_mcast.c
index 4075e75eac85..4e770079e64e 100644
--- a/sys/netinet6/in6_mcast.c
+++ b/sys/netinet6/in6_mcast.c
@@ -1455,11 +1455,11 @@ in6p_block_unblock_source(struct inpcb *inp, struct sockopt *sopt)
 
 		if (gsa->sin6.sin6_family != AF_INET6 ||
 		    gsa->sin6.sin6_len != sizeof(struct sockaddr_in6))
-			return (EINVAL);
+			return (EAFNOSUPPORT);
 
 		if (ssa->sin6.sin6_family != AF_INET6 ||
 		    ssa->sin6.sin6_len != sizeof(struct sockaddr_in6))
-			return (EINVAL);
+			return (EAFNOSUPPORT);
 
 		/*
 		 * XXXGL: this function should use ifnet_byindex_ref, or
@@ -1684,7 +1684,7 @@ in6p_get_source_filters(struct inpcb *inp, struct sockopt *sopt)
 
 	if (msfr.msfr_group.ss_family != AF_INET6 ||
 	    msfr.msfr_group.ss_len != sizeof(struct sockaddr_in6))
-		return (EINVAL);
+		return (EAFNOSUPPORT);
 
 	gsa = (sockunion_t *)&msfr.msfr_group;
 	if (!IN6_IS_ADDR_MULTICAST(&gsa->sin6.sin6_addr))
@@ -1963,12 +1963,13 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sopt)
 
 		if (gsa->sin6.sin6_family != AF_INET6 ||
 		    gsa->sin6.sin6_len != sizeof(struct sockaddr_in6))
-			return (EINVAL);
+			return (EAFNOSUPPORT);
 
 		if (sopt->sopt_name == MCAST_JOIN_SOURCE_GROUP) {
 			if (ssa->sin6.sin6_family != AF_INET6 ||
 			    ssa->sin6.sin6_len != sizeof(struct sockaddr_in6))
-				return (EINVAL);
+				return (EAFNOSUPPORT);
+
 			if (IN6_IS_ADDR_MULTICAST(&ssa->sin6.sin6_addr))
 				return (EINVAL);
 			/*
@@ -2265,11 +2266,13 @@ in6p_leave_group(struct inpcb *inp, struct sockopt *sopt)
 
 		if (gsa->sin6.sin6_family != AF_INET6 ||
 		    gsa->sin6.sin6_len != sizeof(struct sockaddr_in6))
-			return (EINVAL);
+			return (EAFNOSUPPORT);
+
 		if (sopt->sopt_name == MCAST_LEAVE_SOURCE_GROUP) {
 			if (ssa->sin6.sin6_family != AF_INET6 ||
 			    ssa->sin6.sin6_len != sizeof(struct sockaddr_in6))
-				return (EINVAL);
+				return (EAFNOSUPPORT);
+
 			if (IN6_IS_ADDR_MULTICAST(&ssa->sin6.sin6_addr))
 				return (EINVAL);
 			/*
@@ -2509,7 +2512,7 @@ in6p_set_source_filters(struct inpcb *inp, struct sockopt *sopt)
 
 	if (msfr.msfr_group.ss_family != AF_INET6 ||
 	    msfr.msfr_group.ss_len != sizeof(struct sockaddr_in6))
-		return (EINVAL);
+		return (EAFNOSUPPORT);
 
 	gsa = (sockunion_t *)&msfr.msfr_group;
 	if (!IN6_IS_ADDR_MULTICAST(&gsa->sin6.sin6_addr))


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69909cee.235b6.76aa3a8b>