Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 04 Aug 2026 09:55:41 +0000
From:      Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: ddd850aa7720 - main - sys/socket.h: Fix AF_MAX
Message-ID:  <6a71b71d.42559.67104528@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by des:

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

commit ddd850aa7720f77b6605599655df898b16ed74cc
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-08-04 09:55:22 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-08-04 09:55:22 +0000

    sys/socket.h: Fix AF_MAX
    
    AF_MAX was always intended to be one more than the greatest allocated
    value.  Jeff broke this in 2013.  Unfortunately, a bunch of people then
    decided to adapt to the mistake instead of correcting it.
    
    Fixes:          863c7e45628d (" - Reserve a special AF for SDP.  The one we were incorrectly using before    was taken by another AF.")
    MFC after:      3 days
    Sponsored by:   Klara, Inc.
    Sponsored by:   NetApp, Inc.
    Reviewed by:    kevans, glebius
    Differential Revision:  https://reviews.freebsd.org/D58597
---
 lib/libifconfig/libifconfig.c          | 4 ++--
 lib/libifconfig/libifconfig_internal.c | 2 +-
 sys/kern/vfs_export.c                  | 2 +-
 sys/net/route/nhop_ctl.c               | 2 +-
 sys/net/route/route_ddb.c              | 2 +-
 sys/net/route/route_helpers.c          | 4 ++--
 sys/net/rtsock.c                       | 4 ++--
 sys/netlink/route/rt.c                 | 6 +++---
 sys/sys/socket.h                       | 4 +++-
 9 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/lib/libifconfig/libifconfig.c b/lib/libifconfig/libifconfig.c
index bc0fcb6021b2..b450c15180db 100644
--- a/lib/libifconfig/libifconfig.c
+++ b/lib/libifconfig/libifconfig.c
@@ -81,7 +81,7 @@ ifconfig_open(void)
 	if (h == NULL) {
 		return (NULL);
 	}
-	for (int i = 0; i <= AF_MAX; i++) {
+	for (int i = 0; i < AF_MAX; i++) {
 		h->sockets[i] = -1;
 	}
 
@@ -92,7 +92,7 @@ void
 ifconfig_close(ifconfig_handle_t *h)
 {
 
-	for (int i = 0; i <= AF_MAX; i++) {
+	for (int i = 0; i < AF_MAX; i++) {
 		if (h->sockets[i] != -1) {
 			(void)close(h->sockets[i]);
 		}
diff --git a/lib/libifconfig/libifconfig_internal.c b/lib/libifconfig/libifconfig_internal.c
index c6c955debb3d..91de1ece59fb 100644
--- a/lib/libifconfig/libifconfig_internal.c
+++ b/lib/libifconfig/libifconfig_internal.c
@@ -78,7 +78,7 @@ int
 ifconfig_socket(ifconfig_handle_t *h, const int addressfamily, int *s)
 {
 
-	if (addressfamily > AF_MAX) {
+	if (addressfamily >= AF_MAX) {
 		h->error.errtype = SOCKET;
 		h->error.errcode = EINVAL;
 		return (-1);
diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c
index 6dc4eafc4c60..ca5b66426c5c 100644
--- a/sys/kern/vfs_export.c
+++ b/sys/kern/vfs_export.c
@@ -146,7 +146,7 @@ vfs_hang_addrlist(struct mount *mp, struct netexport *nep,
 	saddr = (struct sockaddr *) (np + 1);
 	if ((error = copyin(argp->ex_addr, saddr, argp->ex_addrlen)))
 		goto out;
-	if (saddr->sa_family == AF_UNSPEC || saddr->sa_family > AF_MAX) {
+	if (saddr->sa_family == AF_UNSPEC || saddr->sa_family >= AF_MAX) {
 		error = EINVAL;
 		vfs_mount_error(mp, "Invalid saddr->sa_family: %d");
 		goto out;
diff --git a/sys/net/route/nhop_ctl.c b/sys/net/route/nhop_ctl.c
index f34721c888b4..59a81ecde4df 100644
--- a/sys/net/route/nhop_ctl.c
+++ b/sys/net/route/nhop_ctl.c
@@ -1339,7 +1339,7 @@ nhops_ifnet_state_changed(struct ifnet *ifp, bool status)
 	struct nhop_iter iter = { .fibnum = ifp->if_fib, .wlock = true };
 	bool nhops_changed;
 
-	for (iter.family = 1; iter.family <= AF_MAX; iter.family++) {
+	for (iter.family = 1; iter.family < AF_MAX; iter.family++) {
 		/*
 		 * By tracking nhop changes, we avoid redundant nhgrp
 		 * recompilation triggered by multiple events.
diff --git a/sys/net/route/route_ddb.c b/sys/net/route/route_ddb.c
index 71bffd98663b..c93370d0a570 100644
--- a/sys/net/route/route_ddb.c
+++ b/sys/net/route/route_ddb.c
@@ -174,7 +174,7 @@ DB_SHOW_COMMAND(routetable, db_show_routetable)
 		i = lim = addr;
 	else {
 		i = 1;
-		lim = AF_MAX;
+		lim = AF_MAX - 1;
 	}
 
 	for (; i <= lim; i++) {
diff --git a/sys/net/route/route_helpers.c b/sys/net/route/route_helpers.c
index f09a8bbbd3e5..9160a5872534 100644
--- a/sys/net/route/route_helpers.c
+++ b/sys/net/route/route_helpers.c
@@ -183,7 +183,7 @@ rib_foreach_table_walk(int family, bool wlock, rib_walktree_f_t *wa_f,
 			continue;
 		}
 
-		for (int i = 1; i <= AF_MAX; i++)
+		for (int i = 1; i < AF_MAX; i++)
 			rib_walk_ext(fibnum, i, wlock, wa_f, hook_f, arg);
 	}
 }
@@ -205,7 +205,7 @@ rib_foreach_table_walk_del(int family, rib_filter_f_t *filter_f, void *arg)
 			continue;
 		}
 
-		for (int i = 1; i <= AF_MAX; i++)
+		for (int i = 1; i < AF_MAX; i++)
 			rib_walk_del(fibnum, i, filter_f, arg, 0);
 	}
 }
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 47da83b5561b..fcccbc98470c 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -2623,7 +2623,7 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS)
 	} else if (namelen != 3)
 		return ((namelen < 3) ? EISDIR : ENOTDIR);
 	af = name[0];
-	if (af > AF_MAX)
+	if (af >= AF_MAX)
 		return (EINVAL);
 	bzero(&w, sizeof(w));
 	w.w_op = name[1];
@@ -2647,7 +2647,7 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS)
 	case NET_RT_FLAGS:
 		if (af == 0) {			/* dump all tables */
 			i = 1;
-			lim = AF_MAX;
+			lim = AF_MAX - 1;
 		} else				/* dump only one table */
 			i = lim = af;
 
diff --git a/sys/netlink/route/rt.c b/sys/netlink/route/rt.c
index fbd96bb9fdc6..bf6ef035eb1d 100644
--- a/sys/netlink/route/rt.c
+++ b/sys/netlink/route/rt.c
@@ -1053,7 +1053,7 @@ rtnl_handle_newroute(struct nlmsghdr *hdr, struct nlpcb *nlp,
 	}
 
 	old_linux_compat(&attrs);
-	if (attrs.rta_table >= V_rt_numfibs || attrs.rtm_family > AF_MAX) {
+	if (attrs.rta_table >= V_rt_numfibs || attrs.rtm_family >= AF_MAX) {
 		NLMSG_REPORT_ERR_MSG(npt, "invalid fib");
 		return (EINVAL);
 	}
@@ -1120,7 +1120,7 @@ rtnl_handle_delroute(struct nlmsghdr *hdr, struct nlpcb *nlp,
 	}
 
 	old_linux_compat(&attrs);
-	if (attrs.rta_table >= V_rt_numfibs || attrs.rtm_family > AF_MAX) {
+	if (attrs.rta_table >= V_rt_numfibs || attrs.rtm_family >= AF_MAX) {
 		NLMSG_REPORT_ERR_MSG(npt, "invalid fib");
 		return (EINVAL);
 	}
@@ -1144,7 +1144,7 @@ rtnl_handle_getroute(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate *
 		return (error);
 
 	old_linux_compat(&attrs);
-	if (attrs.rta_table >= V_rt_numfibs || attrs.rtm_family > AF_MAX) {
+	if (attrs.rta_table >= V_rt_numfibs || attrs.rtm_family >= AF_MAX) {
 		NLMSG_REPORT_ERR_MSG(npt, "invalid fib");
 		return (EINVAL);
 	}
diff --git a/sys/sys/socket.h b/sys/sys/socket.h
index d9c31d572b4f..cc910a2a8efa 100644
--- a/sys/sys/socket.h
+++ b/sys/sys/socket.h
@@ -272,7 +272,9 @@ struct accept_filter_arg {
 #define	AF_HYPERV	43		/* HyperV sockets */
 #define	AF_DIVERT	44		/* divert(4) */
 #define	AF_IPFWLOG	46
-#define	AF_MAX		46
+
+#define	AF_MAX		47
+
 /*
  * When allocating a new AF_ constant, please only allocate
  * even numbered constants for FreeBSD until 134 as odd numbered AF_


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a71b71d.42559.67104528>