From nobody Tue Jul 28 18:35:24 2026 X-Original-To: dev-commits-src-main@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 4h8kfj1W8zz6n6BM for ; Tue, 28 Jul 2026 18:35:25 +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 4h8kfj0zyqz3w55 for ; Tue, 28 Jul 2026 18:35:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785263725; 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=Rn0h6nU3TV/PjjkArt9QcokOm24ae2O3LqepC+FqmBaPf7O7byFQeZd9/QvVky3MpW7qBY HpksapsPC0+heX3k3mmH6GZNkcKMTXjSiiz/nlBDsVetw7H9i55LRu+0HQDsYNh+ePJFx2 ELAvIe6eekJtCEEA/uGkhB9/zhrJ1ywnQ1a5TuRJjHFTwK96peZJNAvzc2APkhGpVnVNlb EaQICvZ/o+YwfAne8nfCvbNKjz9f1IbaT1J61pmdpBo1hNNcBvccLYO2IzXjhVKxj+8dyL DMYaJXktwla3HBsYetHAAXnpKU2PXn3kJMWP35vUBgZMc5J0AbLXdu+iUB23Qg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785263725; a=rsa-sha256; cv=none; b=M5ykH5hcID88IPza9392ntQMkVbWcgAaxra8jZ/qswHFzkXKt+RG13ptD8HPuffIhm6/M0 eyxM0P0pegqGeSllkAJ1jFo+2TCd0vrhm/gynqrVZcdRDD+I0WA00QvYtH3ak8+V5xi+Iq RNdZItB0uyRXS0dohlAZOlhTqiC8gx0HnB5/vrvMReJIwnouSFOJTpAhsCJE+zUDJUaDzF KpUyYPC79i55oaeIfpQ8mK8h4JTs9Th9u3xHAhOXkRC30O7sMrjRJWE8Z0RcopcP3DyLKf Cr1RDEE9kLVIiQD1FkJ7/HJHUqrqBh/I3wcTz+gI7SqhDk+Zu1gfx2NifgxLCQ== 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=1785263725; 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=vNhYJQ6mJ+vW7Hb/EW0QLJ6PPi12YHGUPPVplgZ2cKDMvGX6YVz4Ms1UNEcf95k4Fwy0F8 Ip5nYNrRrU4Bs9gZ1h3/GibvVyokUWg4Bf4NJE1amyZo112XS9Tx5Qt5W+6jlwretJGf+i xQthIFnNnAKGg/tOn6kEQQn7V8hDwM9Vpw8bkyxfNceCI2yeiovGcQvJDbQxHLdB1K0FIe nakdNIU1cP8ztg/bPeUa/VIZEwxmJUncEJmr7ERhNjqyfvH5YUr5lxdEvtIhcAIM391xaQ nYCj/VFNu4z0UVGwkQ8ZPCUZKi4RlMgYPIz8avab/tiswVVokSSLhzQEl3gnmQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h8kfh6yZqzrfm for ; Tue, 28 Jul 2026 18:35:24 +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 the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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);