From nobody Thu Apr 30 09:53: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 4g5qHS59xpz6bWMm for ; Thu, 30 Apr 2026 09:53:24 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g5qHS2Kh3z3DSk for ; Thu, 30 Apr 2026 09:53:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777542804; 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=v6T6Pf0bbm/z5PVVRJVRVqLobA/+Hd7akG4kX918l70=; b=Ax1FxSc3jxIEpfj6AxdOo3rNdXE4D+3Tvsbat4GBpxQSNwL0F5ElaO+ScwaeknGKASxhI5 BixU28ta62pq6zt7LtCQE/QC4uvVtgkySEtTY010PtwNzqwT8k3WT8WzhrIagYbF1wQaSr dqiTHLiu6Dd9w8ndM1af2Ha5Q3CAP6KgmCl0TMK9mOEVNfitdTqswNMjIU3XdI6N4X1KfG FlA2A1RbX+t5HdHx5ygRbA/WWBixQWnK17fHJrXai4oE3Ri5sx4Ijbdbf38nA4bTGK4EWE bkDvQbiZhvNU3Hkbpy6DC2anoNif6+7WCTxWYeZpjNSto+JiaHLpEhnEQbTdbA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777542804; a=rsa-sha256; cv=none; b=xyDTB0HbfCZGKdS+i91aSbvwNfx/T1YgaftjHjliCPiY4hdDRYo9jyUENpMzZSAYNwBOWG oB+e7/4/1CU/bCR4EZ7+fyc4WgMk4ADuQP28Rkb/CyYrRYizIVaHZEfDkHEpJ4i05fbDOs ZiZcDJayBMkoHUaKs1DIdkbPqv5dhX5B6Hj9XlX0xXxw410y7dRXzdhH0jo0d1ZkFMEeFu nqAOkkveB33jkYiFjr55C9N8U9zXvCL6Bgc4ag2pXaxe80YUiSRcWE2aASKno1SWXj08JT MwSVF/mDn/4h+jo4nA6NRoaQAaFvhJS/QOv43BXhYODrOBQ78Sh4ZGAvyXA+dQ== 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=1777542804; 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=v6T6Pf0bbm/z5PVVRJVRVqLobA/+Hd7akG4kX918l70=; b=q52CLqsZNmmvNHIhNPonozN9gDXq68Zh8pOK6QlSgYpyVDJiYZsPlPy/pgdeMTy/otYUvI SEAU6dfTE5vUi1C0HqGRP4ZBhLz8w7lVu9BD79aSYh6YN1RopkDaj7JoKHfW1oxCU3lsQz Wnt2IioqRzs3QWhdhjlAPZ3EGo22m7aqZ2gXF4MSsYPUHe1tu4tryfUmyOZnmoCftJX/cx kXc6aOMyEAu/5GJuJ7WQPZG/MJNgMJ3QIMSdbe4ftsfOgwkYI3hYYVwooJ/63qsaS2vIFk pY30k67ORN88vsw+ea/LK4EVy8fIbOcZ0V9lY9TXCMz8MvwM0e+i4ItXzGWOCg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g5qHS1YvVz1L1v for ; Thu, 30 Apr 2026 09:53:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 445d1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 30 Apr 2026 09:53:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Zhenlei Huang Subject: git: c624e04a0bd0 - stable/15 - if_clone: Make ifnet_detach_sxlock opaque to consumers 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: zlei X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: c624e04a0bd0ab147ec64c17e3e53f5ebc769dcf Auto-Submitted: auto-generated Date: Thu, 30 Apr 2026 09:53:24 +0000 Message-Id: <69f32694.445d1.5e97707f@gitrepo.freebsd.org> The branch stable/15 has been updated by zlei: URL: https://cgit.FreeBSD.org/src/commit/?id=c624e04a0bd0ab147ec64c17e3e53f5ebc769dcf commit c624e04a0bd0ab147ec64c17e3e53f5ebc769dcf Author: Zhenlei Huang AuthorDate: 2026-04-13 04:38:44 +0000 Commit: Zhenlei Huang CommitDate: 2026-04-30 09:52:01 +0000 if_clone: Make ifnet_detach_sxlock opaque to consumers The change e133271fc1b5e introduced ifnet_detach_sxlock, and change 6d2a10d96fb5 widened its coverage, but there are still consumers, net80211 and tuntap e.g., want it. Instead of sprinkling it everywhere, make it opaque to consumers. Out of tree drivers shall also benefit from this change. Reviewed by: kp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D56298 (cherry picked from commit e9fc0c538264355bd3fd9120c650078281c2a290) --- sys/net/if.c | 5 +---- sys/net/if_clone.c | 17 ++++++++++++++++- sys/netlink/route/iface.c | 3 --- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sys/net/if.c b/sys/net/if.c index 2da0afbeabc9..223082b675e4 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -3017,11 +3017,8 @@ ifioctl(struct socket *so, u_long cmd, caddr_t data, struct thread *td) case SIOCIFDESTROY: error = priv_check(td, PRIV_NET_IFDESTROY); - if (error == 0) { - sx_xlock(&ifnet_detach_sxlock); + if (error == 0) error = if_clone_destroy(ifr->ifr_name); - sx_xunlock(&ifnet_detach_sxlock); - } goto out_noref; case SIOCIFGCLONERS: diff --git a/sys/net/if_clone.c b/sys/net/if_clone.c index 066547ceeeb3..04558b6af5ec 100644 --- a/sys/net/if_clone.c +++ b/sys/net/if_clone.c @@ -441,6 +441,14 @@ if_clone_destroyif_flags(struct if_clone *ifc, struct ifnet *ifp, uint32_t flags { int err; + /* + * XXXZL: To avoid racing with if_vmove() so that we will have + * stable if_vnet. + * This have a good effect, that is, the destroying of tightly + * coupled cloned interfaces such as epair(4) is serialized, + * although the driver is responsible to take care of that. + */ + sx_assert(&ifnet_detach_sxlock, SA_XLOCKED); /* * Given that the cloned ifnet might be attached to a different * vnet from where its cloner was registered, we have to @@ -467,7 +475,12 @@ if_clone_destroyif_flags(struct if_clone *ifc, struct ifnet *ifp, uint32_t flags int if_clone_destroyif(struct if_clone *ifc, struct ifnet *ifp) { - return (if_clone_destroyif_flags(ifc, ifp, 0)); + int err; + + sx_xlock(&ifnet_detach_sxlock); + err = if_clone_destroyif_flags(ifc, ifp, 0); + sx_xunlock(&ifnet_detach_sxlock); + return (err); } static struct if_clone * @@ -669,9 +682,11 @@ if_clone_detach(struct if_clone *ifc) V_if_cloners_count--; IF_CLONERS_UNLOCK(); + sx_xlock(&ifnet_detach_sxlock); /* destroy all interfaces for this cloner */ while (!LIST_EMPTY(&ifc->ifc_iflist)) if_clone_destroyif_flags(ifc, LIST_FIRST(&ifc->ifc_iflist), IFC_F_FORCE); + sx_xunlock(&ifnet_detach_sxlock); IF_CLONE_REMREF(ifc); } diff --git a/sys/netlink/route/iface.c b/sys/netlink/route/iface.c index 9beb80792af4..0095ba869c51 100644 --- a/sys/netlink/route/iface.c +++ b/sys/netlink/route/iface.c @@ -551,10 +551,7 @@ rtnl_handle_dellink(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate *n } NLP_LOG(LOG_DEBUG3, nlp, "mapped ifindex %u to %s", attrs.ifi_index, if_name(ifp)); - sx_xlock(&ifnet_detach_sxlock); error = if_clone_destroy(if_name(ifp)); - sx_xunlock(&ifnet_detach_sxlock); - NLP_LOG(LOG_DEBUG2, nlp, "deleting interface %s returned %d", if_name(ifp), error); if_rele(ifp);