Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 May 2025 17:12:02 GMT
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 5d4ef780ea9f - stable/14 - sctp: compute address flags only for IPv6 addresses
Message-ID:  <202505211712.54LHC2t9012197@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/14 has been updated by tuexen:

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

commit 5d4ef780ea9f81b6b5bdd23b9f442eae8c481edb
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2025-05-05 20:43:50 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2025-05-21 17:11:43 +0000

    sctp: compute address flags only for IPv6 addresses
    
    Only call sctp_gather_internal_ifa_flags() for IPv6 addresses and
    also compile this code only, when IPv6 is supported.
    This fixes the compilation of IPv4 only kernels.
    
    Reported by:    bz@
    Fixes:          6ab4b0c0df57 ("sctp: initilize local address flags correctly")
    
    (cherry picked from commit 99c58ad021b2f7dc0496e16d313c5e28a552f0d0)
---
 sys/netinet/sctp_pcb.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index 44807733b9e9..b5190bdf34d8 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -453,7 +453,11 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index,
 					SCTPDBG(SCTP_DEBUG_PCB4,
 					    "Clearing deleted ifa flag\n");
 					sctp_ifap->localifa_flags = SCTP_ADDR_VALID;
-					sctp_gather_internal_ifa_flags(sctp_ifap);
+#ifdef INET6
+					if (sctp_ifap->address.sa.sa_family == AF_INET6) {
+						sctp_gather_internal_ifa_flags(sctp_ifap);
+					}
+#endif
 					sctp_ifap->ifn_p = sctp_ifnp;
 					atomic_add_int(&sctp_ifap->ifn_p->refcount, 1);
 				}
@@ -476,7 +480,11 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index,
 		} else {
 			/* Repair ifn_p, which was NULL... */
 			sctp_ifap->localifa_flags = SCTP_ADDR_VALID;
-			sctp_gather_internal_ifa_flags(sctp_ifap);
+#ifdef INET6
+			if (sctp_ifap->address.sa.sa_family == AF_INET6) {
+				sctp_gather_internal_ifa_flags(sctp_ifap);
+			}
+#endif
 			SCTPDBG(SCTP_DEBUG_PCB4,
 			    "Repairing ifn %p for ifa %p\n",
 			    (void *)sctp_ifnp, (void *)sctp_ifap);
@@ -501,7 +509,12 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index,
 	sctp_ifap->ifa = ifa;
 	memcpy(&sctp_ifap->address, addr, addr->sa_len);
 	sctp_ifap->localifa_flags = SCTP_ADDR_VALID | SCTP_ADDR_DEFER_USE;
-	sctp_gather_internal_ifa_flags(sctp_ifap);
+	sctp_ifap->flags = ifa_flags;
+#ifdef INET6
+	if (addr->sa_family == AF_INET6) {
+		sctp_gather_internal_ifa_flags(sctp_ifap);
+	}
+#endif
 	/* Set scope */
 	switch (sctp_ifap->address.sa.sa_family) {
 #ifdef INET



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