From nobody Tue Jul 28 18:35:24 2026 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 4h8kfp2ksrz6n6Dn for ; Tue, 28 Jul 2026 18:35:30 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h8kfp1t5mz3wJg for ; Tue, 28 Jul 2026 18:35:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785263730; 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=2eHPD/VleE6GWRoRAzmoirXL4SrO0hJL+HcrM26iG+s=; b=l6N1SFegpWCYGeGoeUPMPIde5gvIBXOkUy34+nE2auKqxxzMYhWkLdCUVPOFzveqRkRhSn oz0Dg7O/dzgSRsbB6LKeNkY7HsIwyLribITElE+Utknve9/GDJwhlIwHhkEQ+5vseZvXbD Pv8sZOWWJm6i335E7mCChauHwGJFPL08vI+FurhsmHg0aiPka8t89xnLDy0DjhV4ZNQYPn QY0YzNDvbSwO8ahv1D5hdXFWv1uU8X4uy5cGX9LlId4/lqeXlY1cYYNoI3SrzlAsQI2iEq 2p2B3dT+7HA2UQNDbF5NOTv+fd6lh19rc0zqL2xCRcb3L80qRjVQcO9rB4ip5A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785263730; a=rsa-sha256; cv=none; b=dbnFKjnWHJCrZbuqwRPl9RoTXiH7d6XKo6OYS/dMpSUR2Hbf01XbzoVMMA4mjvqR41pu8t dzKVyvPaGcw28IH0eg7gKaUWr7kEK/jio9SllqYYcGWKtMpJDcKFUv5mOj5qpM5ODEP5p9 GfFdVdnhYgg2dLPe6GT7B1hm4uRb355So5A6Rpot4ixz8wL4zMXdChKJPPRkJPh00r5y2x bnyOMsK8itBcRZLyuI4T21Zo06tEMXCz8mKSolcj76W9w3TyjQh//+UGy/wNP7x2JwLbit Gz+LEfK90sVV+v/Q+eJs/B/oE/FL9E1kn7Bkqp7UG447ARP6rr5L1pnK1f4YMw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785263730; 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=2eHPD/VleE6GWRoRAzmoirXL4SrO0hJL+HcrM26iG+s=; b=Rl5lGmBFa6cm3z9VXlYbkF/JUkOxluRMQ1DsCllqJtjv3igoQIEpKbSZ2fhSQdQHhuoNmA v/h4yeWPgZtwvGKeAYJnGNJJ/83JHyjEZ/PQTV/J/U8EyixU316XF/RjkUH4L8vtDQQigv IlMQWwQug4MdOTcytOp6wSmCDvDWhVjAmLC32Tu5OwXdjsJgc6sZPvXYrIAD5QxqRDybOX wasaZUqAdjBHrrtl+fi8YBOtBnf47tvLb7rER9CQwEooNTYNgTyI82qCf2Wwy2BNn7mc6N /SqLri1EQQaTkUdN/AHteuDR4rakTzn56YLc356pZl6eClnFyay2J+nu5aO9XQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h8kfp09fZzs5H for ; Tue, 28 Jul 2026 18:35:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3e90a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 28 Jul 2026 18:35:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bruce M Simpson Subject: git: f884e820d87f - main - netinet6: Tear down IPv6 source address selection policies with rest of IPv6. 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bms X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f884e820d87fe31962f3e0ce7fe6125cfda82eaa Auto-Submitted: auto-generated Date: Tue, 28 Jul 2026 18:35:24 +0000 Message-Id: <6a68f66c.3e90a.387b51d1@gitrepo.freebsd.org> The branch main has been updated by bms: URL: https://cgit.FreeBSD.org/src/commit/?id=f884e820d87fe31962f3e0ce7fe6125cfda82eaa commit f884e820d87fe31962f3e0ce7fe6125cfda82eaa Author: Bruce M Simpson AuthorDate: 2026-02-28 20:24:49 +0000 Commit: Bruce M Simpson CommitDate: 2026-07-28 18:35:02 +0000 netinet6: Tear down IPv6 source address selection policies with rest of IPv6. This may plug minor leaks which no-one has reported. The default IPv6 source address selection policy list in FreeBSD is usually limited to 9 entries, and can be readily inspected with ip6addrctl(8). The policy table is however instantiated for each VNET. The leak of a pol instance in delete_addrsel_policyent() was already plugged by @ae in commit-id ecc5c73, so that change has not been merged. Do not tear down the sxlocks as glebius has requested, and move the addrsel_policyent{} declarations further up to avoid redundant forward declarations as glebius requested for stylistic reasons. Reviewed by: ae, pouria Sponsored by: Cisco Systems, Inc. Differential Revision: https://reviews.freebsd.org/D55599 --- sys/netinet6/in6.h | 1 + sys/netinet6/in6_src.c | 44 ++++++++++++++++++++++++++++---------------- sys/netinet6/ip6_input.c | 1 + 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/sys/netinet6/in6.h b/sys/netinet6/in6.h index 168bb927fb57..a574e2cb137f 100644 --- a/sys/netinet6/in6.h +++ b/sys/netinet6/in6.h @@ -690,6 +690,7 @@ void in6_sin_2_v4mapsin6(const struct sockaddr_in *sin, struct sockaddr_in6 *sin6); void in6_sin6_2_sin_in_sock(struct sockaddr *nam); extern void addrsel_policy_init(void); +void addrsel_policy_destroy(void); #define satosin6(sa) ((struct sockaddr_in6 *)(sa)) #define sin6tosa(sin6) ((struct sockaddr *)(sin6)) diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c index d5e8e0f952c6..07e5b191afc2 100644 --- a/sys/netinet6/in6_src.c +++ b/sys/netinet6/in6_src.c @@ -886,6 +886,22 @@ in6_selecthlim(struct inpcb *inp, struct ifnet *ifp) return (V_ip6_defhlim); } +/* + * The followings are implementation of the policy table using a + * simple tail queue. + * XXX such details should be hidden. + * XXX implementation using binary tree should be more efficient. + */ +struct addrsel_policyent { + TAILQ_ENTRY(addrsel_policyent) ape_entry; + struct in6_addrpolicy ape_policy; +}; + +TAILQ_HEAD(addrsel_policyhead, addrsel_policyent); + +VNET_DEFINE_STATIC(struct addrsel_policyhead, addrsel_policytab); +#define V_addrsel_policytab VNET(addrsel_policytab) + void addrsel_policy_init(void) { @@ -903,6 +919,18 @@ addrsel_policy_init(void) ADDRSEL_SXLOCK_INIT(); } +void +addrsel_policy_destroy(void) +{ + struct addrsel_policyent *pol, *tpol; + + TAILQ_FOREACH_SAFE(pol, &V_addrsel_policytab, ape_entry, tpol) { + TAILQ_REMOVE(&V_addrsel_policytab, pol, ape_entry); + free(pol, M_IFADDR); + } + /* TODO: Perform matching destruction of locks elsewhere. */ +} + static struct in6_addrpolicy * lookup_addrsel_policy(struct sockaddr_in6 *key) { @@ -976,22 +1004,6 @@ in6_src_ioctl(u_long cmd, caddr_t data) return (0); /* XXX: compromise compilers */ } -/* - * The followings are implementation of the policy table using a - * simple tail queue. - * XXX such details should be hidden. - * XXX implementation using binary tree should be more efficient. - */ -struct addrsel_policyent { - TAILQ_ENTRY(addrsel_policyent) ape_entry; - struct in6_addrpolicy ape_policy; -}; - -TAILQ_HEAD(addrsel_policyhead, addrsel_policyent); - -VNET_DEFINE_STATIC(struct addrsel_policyhead, addrsel_policytab); -#define V_addrsel_policytab VNET(addrsel_policytab) - static void init_policy_queue(void) { diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c index 426b81dc9c03..263acefe7211 100644 --- a/sys/netinet6/ip6_input.c +++ b/sys/netinet6/ip6_input.c @@ -398,6 +398,7 @@ ip6_destroy(void *unused __unused) frag6_destroy(); nd6_destroy(); + addrsel_policy_destroy(); in6_ifattach_destroy(); hashdestroy(V_in6_ifaddrhashtbl, M_IFADDR, V_in6_ifaddrhmask);