From nobody Tue Mar 22 12:41:14 2022 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 C89171A3A6AC; Tue, 22 Mar 2022 12:41:14 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KNB1Q58hvz3qqn; Tue, 22 Mar 2022 12:41:14 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1647952874; 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=ng1X7cApEenHomTl7zprFk2xs+tbx0DRt+sIfRyGdIE=; b=VadS08OxplzaxiVqObxQZReoGV1qtM8ZJJ+oSFkySbqQqGZZbJh+XHi1+EDQK4+bI9L5Fn TFY7I+8rZq565fT2uQIEES77l5YBC9cXgHdE5t2TWMZMZ3STjr1Wwi/nvRZybj0l5DrVg/ 5MhhzqiD7vgUPARnILp3bEaRk/AZyBN085fUcZF89VaxZgyPZp34JXmrAMLxDiVG2QBXo0 GwhScJ4e55RnH1UrT4dWEPinIuE5aAzYks4csvRuyVgKAkBFVVkzOcbwxZlrsavzRojakL g8SAqqsfyqTc9wpRS+Ha5z9dWREuTbVe5Ia+I1FEDSbF0QBRQovXs0d0Oinqcw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9194B78BD; Tue, 22 Mar 2022 12:41:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 22MCfEc3096608; Tue, 22 Mar 2022 12:41:14 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 22MCfEB8096607; Tue, 22 Mar 2022 12:41:14 GMT (envelope-from git) Date: Tue, 22 Mar 2022 12:41:14 GMT Message-Id: <202203221241.22MCfEB8096607@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mike Karels Subject: git: 2cf1e120c654 - main - Enter epoch when addding IPv4 multicast forwarding cache entry 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: karels X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2cf1e120c654df5d02b115dd8dc278dcfcb4a80d Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1647952874; 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=ng1X7cApEenHomTl7zprFk2xs+tbx0DRt+sIfRyGdIE=; b=osQ/WlyPV0GaLIDdGJ5hXYvZAPkHzzL0pVs25x689t3FJQ9SKYTdSl8bLqyxOKS5x2UaDi j7mVnJwyoIrm0t0s/QZwaeHBtUlqaan6AfNE4emsmHaNV6yFeHkVthD2s3tKNANaY278ss 87vvxIm3Hibn4dEcCRMJfBZ73RROkXeNCkPhiriGB8o8ooYS8iLwYtIC7oGhl1Q0J4fIfe v3MVb+PKEXs1hAbZV23Pq0Wq4Sqi1pxA3SbEtwaULW5Kb5dLT8lut0RX7EBsXqfvU/dvGh crB2VCRPGbbYSlXBIF1DxESvbfIaOQDzfQQQkObLC5p3CLduP0ZweTwtHBb0gw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1647952874; a=rsa-sha256; cv=none; b=hdOaA42eEJVakt6DN1S5QJOYaBUW7UUnsMmgQ1MjHnEEHKyVT319bl/4i9ini5HHWBQv7P X4u4UMqJDQmtkEGGLvcFFZcODUWvtzy52WQo9fqEJYOZ5khhncXfPLGnmC+jVIp6uvIrel Z9y1KCLt/x8vq9ngFIvBDSQ2CF6Ivm6DHg3SoPcjG1mupqzCy/bppCm5pwP+xQ3Czphmha NvvLO8g0qaTNxaskUQUfJDun9/tdegn1Bvh8E9dAiW3H+EfEFYuIkYRRp9LpoTMOS/pSV0 5q5ZsYt790maViN6lENlx7Mst3QLL0ZLeP8bA/2IoabKGB14fjupGjcEuVNw1w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by karels: URL: https://cgit.FreeBSD.org/src/commit/?id=2cf1e120c654df5d02b115dd8dc278dcfcb4a80d commit 2cf1e120c654df5d02b115dd8dc278dcfcb4a80d Author: Mike Karels AuthorDate: 2022-03-21 14:50:08 +0000 Commit: Mike Karels CommitDate: 2022-03-22 12:28:57 +0000 Enter epoch when addding IPv4 multicast forwarding cache entry The code path from the IPv4 multicast setsockopt could call ip_output() without entering an epoch. Specifically, the MRT_ADD_MFC setbsocopt would call add_mfc(), which in turn called ip_mdq() to send queued packets. This resulted in an epoch assert failure in ip_output(). Enter an epoch in add_mfc(), and add some epoch asserts to check for similar failures. Reviewed by: kp, bz, wma, cy Differential Revision: https://reviews.freebsd.org/D34624 --- sys/netinet/ip_mroute.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c index 99ec2952de88..e6acfd4dcfc7 100644 --- a/sys/netinet/ip_mroute.c +++ b/sys/netinet/ip_mroute.c @@ -1124,6 +1124,7 @@ add_mfc(struct mfcctl2 *mfccp) struct rtdetq *rte; u_long hash = 0; u_short nstl; + struct epoch_tracker et; MRW_WLOCK(); rt = mfc_find(&mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); @@ -1144,6 +1145,7 @@ add_mfc(struct mfcctl2 *mfccp) */ nstl = 0; hash = MFCHASH(mfccp->mfcc_origin, mfccp->mfcc_mcastgrp); + NET_EPOCH_ENTER(et); LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp) && @@ -1171,6 +1173,7 @@ add_mfc(struct mfcctl2 *mfccp) } } } + NET_EPOCH_EXIT(et); /* * It is possible that an entry is being inserted without an upcall @@ -1548,6 +1551,7 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) int plen = ntohs(ip->ip_len); MRW_LOCK_ASSERT(); + NET_EPOCH_ASSERT(); /* * If xmt_vif is not -1, send on only the requested vif. @@ -1752,6 +1756,7 @@ send_packet(struct vif *vifp, struct mbuf *m) int error __unused; MRW_LOCK_ASSERT(); + NET_EPOCH_ASSERT(); imo.imo_multicast_ifp = vifp->v_ifp; imo.imo_multicast_ttl = mtod(m, struct ip *)->ip_ttl - 1;