From nobody Wed Oct 28 20:41:28 2026 X-Original-To: dev-commits-src-branches@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 4jFK5h5VLbz6x71K for ; Wed, 28 Oct 2026 20:41:28 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jFK5h1Xzcz4Zth for ; Wed, 28 Oct 2026 20:41:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793220088; 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=w0Xx0wwou1ekmayyNaI7jpDgr3t8jaDd0LAhQ2bi6+Q=; b=t+XZI6jj3P7FiImn1CSw8FnTK0T1wi/4qRNAvReR6/NHhcgSPXpMrTuI6qFykBcuaV5o5B zcVcFW3/PDEAfa0o+e0/uOTOz9WZh4/rIa9F98CQKklZ2hrMXhezwREYXgigX/e/rdMZRw VgerVfQoRPJBzPGa7G7ANNa2vdekmqLe3wWYtj1h1u+OvNaGNqqn3lEsmaIMSpVTj+LGD9 ktgG7SjLnwY/aiycWVgDDDv4Gt/7pjNB+DGuSiPlsIR69z35n0UduyGx/clftfr1XnH/kB lKpFk/6Epz/Dch3VRXab5vSJAEd7LH00AjsOpFggiIyRYe0D/gZcaTOzYA6pWQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793220088; b=QDoJJl4BZF1qy+ydrUXhdfvWnI0FwtSMKZKFjPR9CafsswUEUo+Tluwp5JNrlhts/+gA3L keVj6ssGHHTVvBshtE1wmxL5MB6bPhw2t7S6IZSC39oJ0FKIP2/ngF+29yzTpNflMrB2Ls T5/qI9veGR38dvqPRdQmYOiTV4mNBpdFKuskbboECoEMAwYHMIGV132Dq3cqn73skgitRc 9mYmxhSbXRURWLAJ6sB96QlVDl1CQ91zDwv/OX2tOb90oUBJ4a3n1ULK9GVQ3zAviCFQRF iEPEgf+CuQX+oQ0PPKd2HxBIdI3rxNzfXQtDTSOOyRqHpnZpGL3KOSfVc06vTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793220088; 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=w0Xx0wwou1ekmayyNaI7jpDgr3t8jaDd0LAhQ2bi6+Q=; b=LG/WGgLUSsoFmP0/5tAQ2s+qEAmDPQ7BPlh5Enf2KQRSilCtk0gOcRDmR3wxjUdtnwOjU9 xfn65OHMAdWenyRINvKgVoKTAui/ccXZ/N4ULEppOsx8qcgX9N3KM2/Ie07JV9Q6DcQyjp hPfXtUZw514uKP0ER/AgXC5+/91f2hy/9XJUyQPeqZw2PnZsuWJxSSmZnq3RGc15RNGIIc G+a9XsrVfCILu5jSzAyKh9OEV+WwMJyMMFuN4rMrtL2sAg5CsAvWfKXXvdWr6N2ylJpiLU dBAupyv8grtPFKmt7wvyCI7hqyjuZybqGlFvNxkD8Kf7JBsh1K+XUa7G70fGUg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jFK5h0gCXz1Mpd for ; Wed, 28 Oct 2026 20:41:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d0e7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 28 Oct 2026 20:41:28 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: R. Christian McDonald Subject: git: 3c87acbd4271 - stable/14 - pf: modify pfik_flags atomically List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: Commits to the stable branches of the FreeBSD src repository 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: rcm X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 3c87acbd427149450db9a800ef5a467272710709 Auto-Submitted: auto-generated Date: Wed, 28 Oct 2026 20:41:28 +0000 Message-Id: <6ae25df8.1d0e7.66dbafae@gitrepo.freebsd.org> The branch stable/14 has been updated by rcm: URL: https://cgit.FreeBSD.org/src/commit/?id=3c87acbd427149450db9a800ef5a467272710709 commit 3c87acbd427149450db9a800ef5a467272710709 Author: R. Christian McDonald AuthorDate: 2026-09-30 22:56:22 +0000 Commit: R. Christian McDonald CommitDate: 2026-10-28 20:38:03 +0000 pf: modify pfik_flags atomically The purge thread sets PFI_IFLAG_REFS on the interfaces that states refer to without the rules lock, under which the other flags are changed. The updates can interleave, so that a "set skip on" is lost, or outlives its removal, until the next ruleset load. Use atomic operations to modify the flags. In the purge thread, only write if the flag is not already set. Reviewed by: kp Approved by: kp (mentor) MFC after: 1 week Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D60107 (cherry picked from commit c1241c6e30c792fb514f4689d2ed92ee21d3cf39) --- sys/netpfil/pf/pf.c | 12 ++++++++++-- sys/netpfil/pf/pf_if.c | 10 +++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c index 469087a040e1..7c1f43a8b9bd 100644 --- a/sys/netpfil/pf/pf.c +++ b/sys/netpfil/pf/pf.c @@ -2459,6 +2459,14 @@ pf_free_state(struct pf_kstate *cur) pf_counter_u64_add(&V_pf_status.fcounters[FCNT_STATE_REMOVALS], 1); } +static inline void +pf_kkif_mark(struct pfi_kkif *kif) +{ + + if ((atomic_load_int(&kif->pfik_flags) & PFI_IFLAG_REFS) == 0) + atomic_set_int(&kif->pfik_flags, PFI_IFLAG_REFS); +} + /* * Called only from pf_purge_thread(), thus serialized. */ @@ -2494,11 +2502,11 @@ relock: s->nat_rule.ptr->rule_ref |= PFRULE_REFS; if (s->anchor.ptr != NULL) s->anchor.ptr->rule_ref |= PFRULE_REFS; - s->kif->pfik_flags |= PFI_IFLAG_REFS; + pf_kkif_mark(s->kif); SLIST_FOREACH(mrm, &s->match_rules, entry) mrm->r->rule_ref |= PFRULE_REFS; if (s->rt_kif) - s->rt_kif->pfik_flags |= PFI_IFLAG_REFS; + pf_kkif_mark(s->rt_kif); count++; } PF_HASHROW_UNLOCK(ih); diff --git a/sys/netpfil/pf/pf_if.c b/sys/netpfil/pf/pf_if.c index a5f26b5624bd..0de8013335f0 100644 --- a/sys/netpfil/pf/pf_if.c +++ b/sys/netpfil/pf/pf_if.c @@ -380,7 +380,7 @@ pfi_kkif_remove_if_unref(struct pfi_kkif *kif) RB_REMOVE(pfi_ifhead, &V_pfi_ifs, kif); - kif->pfik_flags |= PFI_IFLAG_REFS; + atomic_set_int(&kif->pfik_flags, PFI_IFLAG_REFS); mtx_lock(&pfi_unlnkdkifs_mtx); LIST_INSERT_HEAD(&V_pfi_unlinked_kifs, kif, pfik_list); @@ -414,7 +414,7 @@ pfi_kkif_purge(void) LIST_REMOVE(kif, pfik_list); pf_kkif_free(kif); } else - kif->pfik_flags &= ~PFI_IFLAG_REFS; + atomic_clear_int(&kif->pfik_flags, PFI_IFLAG_REFS); } mtx_unlock(&pfi_unlnkdkifs_mtx); } @@ -603,7 +603,7 @@ pfi_kkif_update(struct pfi_kkif *kif) if (tmpkif == NULL) continue; - tmpkif->pfik_flags |= kif->pfik_flags; + atomic_set_int(&tmpkif->pfik_flags, kif->pfik_flags); } } @@ -959,7 +959,7 @@ pfi_set_flags(const char *name, int flags) RB_FOREACH(p, pfi_ifhead, &V_pfi_ifs) { if (pfi_skip_if(name, p)) continue; - p->pfik_flags |= flags; + atomic_set_int(&p->pfik_flags, flags); } NET_EPOCH_EXIT(et); return (0); @@ -975,7 +975,7 @@ pfi_clear_flags(const char *name, int flags) RB_FOREACH_SAFE(p, pfi_ifhead, &V_pfi_ifs, tmp) { if (pfi_skip_if(name, p)) continue; - p->pfik_flags &= ~flags; + atomic_clear_int(&p->pfik_flags, flags); if (p->pfik_ifp == NULL && p->pfik_group == NULL && p->pfik_flags == 0 && p->pfik_rulerefs == 0) {