From nobody Thu Feb 12 21:39:35 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 4fBpbq4ltnz6Rh86 for ; Thu, 12 Feb 2026 21:39:35 +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" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fBpbq2CPzz3phw for ; Thu, 12 Feb 2026 21:39:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770932375; 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=Tx/q3tzaMgycCxFMysSdeQ7DD5IzxgJSRNs/tMxITPU=; b=R78Wcx1qUsGo1W8iulvIsti+vXeLHHjwBh4jdiGGFiFyv3QYBJ7Tkt3aNku7EINS4FHPeM yOl1kek3sWoIFD8TTXnMWMJrR6+7ytRLLUxazaO7VQgoLw7VKymDJlQCP9qeGZvaMyXOkD ZS0rAvdpE2p44IggFT3Wno6/mJM4NVD9oQI9mMjWqiEvFqthsmkYdl3rx5ihfSpds0uXo1 qYARPeKqq9A4LkhPhcccFKWmEKs2Y9f5M38ARh3xh+pvSNAcXWtT40DJirypL35AMpLJKQ bwOWGuuvx/e3aWiG0b1fcLRnrYUeEW9sE1AcwrZbCnZajBOh6U2K5iwWigaN3g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770932375; a=rsa-sha256; cv=none; b=UH/LpPftwfkmt/Ehqez/vEwyvWHEd5NfB9WNSmuaFKPK8kad0sQZi/+r4bOXhtgl+XQjHV eRr2EkvS4wJ74w94VKGqd/xdUg078DT2VKyWP/NIm8DXAGCoT18B5tSRCCxESZLVEj+Ud5 J8XrkaIYdxM62oJXNSvFtfMKyO1Yfl358FciTl78upKabXqhIH/YtdYCxlTa90mFWnicwE s0hzK/To5HzsRSSRwzEQiJr0MQQcMCwaYsNGUaE/533lLLHj2kn9iW/LV9eKysSOzKEFmO NUSABj2Rs7SIzMCSby3n7iv1/prmqYZ+kuUsUgSBaiBVDQoG8rSUV0o+V9S0gQ== 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=1770932375; 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=Tx/q3tzaMgycCxFMysSdeQ7DD5IzxgJSRNs/tMxITPU=; b=WsvUglxreGFsN/TVKDOhr2szlUynVmK/chn/7j/LEXAXFEEjQrOvYWSHU2aE9qXo27joIF sESISrLLRqHvEgq55rqWdGp8V5lhCjLMtCPXrIwSZTLBHMskdi98JPzpdHSY26tWGYHaFL wYlqM7YpAXWAT0mOZ/u+WXxfWOnDqe3KaJjzyV8DW5dvQxBU4QKn3O89JyVn6Pge5YRKgr cj7czv8OqGKDCGVg3N9lYmF7JTUSmXVSq8xCtZ4cbkr7wS5RO1xMr8UlJ6E9fj/n4wPbnT usyjsMaIYtmD1AYLbqQDq/p+him3EQqzYeXUsTfiSmB5S6m/pt26pegGB5ijPA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fBpbq1n66ztYr for ; Thu, 12 Feb 2026 21:39:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d708 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 12 Feb 2026 21:39:35 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: 1e7665e36860 - main - libpfctl: verify all parsers 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: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1e7665e36860af87cae24cbeb1a65a97ad9a0efb Auto-Submitted: auto-generated Date: Thu, 12 Feb 2026 21:39:35 +0000 Message-Id: <698e4897.1d708.622b76e1@gitrepo.freebsd.org> The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=1e7665e36860af87cae24cbeb1a65a97ad9a0efb commit 1e7665e36860af87cae24cbeb1a65a97ad9a0efb Author: Kristof Provost AuthorDate: 2026-02-12 09:39:05 +0000 Commit: Kristof Provost CommitDate: 2026-02-12 16:05:16 +0000 libpfctl: verify all parsers List all currently defined parsers in 'all_parsers', and pass them to SNL_VERIFY_PARSERS(). This will detect incorrect odering in parsers, which will help us detect otherwise subtle bugs. Sponsored by: Rubicon Communications, LLC ("Netgate") --- lib/libpfctl/libpfctl.c | 52 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c index 4f4a7fe57002..9025b94249ce 100644 --- a/lib/libpfctl/libpfctl.c +++ b/lib/libpfctl/libpfctl.c @@ -69,12 +69,15 @@ const char* PFCTL_SYNCOOKIES_MODE_NAMES[] = { static int _pfctl_clear_states(int , const struct pfctl_kill *, unsigned int *, uint64_t); +static void _pfctl_verify_parsers(void); struct pfctl_handle * pfctl_open(const char *pf_device) { struct pfctl_handle *h; + _pfctl_verify_parsers(); + h = calloc(1, sizeof(struct pfctl_handle)); h->fd = open(pf_device, O_RDWR); @@ -397,10 +400,6 @@ static const struct snl_attr_parser ap_getstatus[] = { SNL_DECLARE_PARSER(getstatus_parser, struct genlmsghdr, snl_f_p_empty, ap_getstatus); #undef _OUT -static const struct snl_hdr_parser *stat_parser[] = { - &getstatus_parser, -}; - struct pfctl_status * pfctl_get_status_h(struct pfctl_handle *h) { @@ -411,8 +410,6 @@ pfctl_get_status_h(struct pfctl_handle *h) uint32_t seq_id; int family_id; - SNL_VERIFY_PARSERS(stat_parser); - family_id = snl_get_genl_family(&h->ss, PFNL_FAMILY_NAME); if (family_id == 0) return (NULL); @@ -1971,15 +1968,9 @@ static struct snl_attr_parser ap_state[] = { #undef _OUT SNL_DECLARE_PARSER(state_parser, struct genlmsghdr, snl_f_p_empty, ap_state); -static const struct snl_hdr_parser *all_parsers[] = { - &state_parser, &skey_parser, &speer_parser, - &creator_parser, &getrules_parser -}; - int pfctl_get_states_h(struct pfctl_handle *h, struct pfctl_state_filter *filter, pfctl_get_state_fn f, void *arg) { - SNL_VERIFY_PARSERS(all_parsers); int family_id = snl_get_genl_family(&h->ss, PFNL_FAMILY_NAME); int ret; @@ -4239,3 +4230,40 @@ pfctl_source_clear(struct pfctl_handle *h, struct pfctl_source_clear *kill) return (e.error); } +static const struct snl_hdr_parser *all_parsers[] = { + &begin_addrs_parser, + &clear_states_parser, + &clr_addrs_parser, + &creator_parser, + &get_addr_parser, + &get_addrs_parser, + &get_limit_parser, + &get_timeout_parser, + &getrule_parser, + &getrules_parser, + &getstatus_parser, + &nadd_parser, + &natlook_parser, + &ndel_parser, + &ruleset_parser, + &skey_parser, + &source_parser, + &sourcelim_parser, + &speer_parser, + &srcnode_parser, + &state_parser, + &statelim_parser, + &table_add_addr_parser, + &table_astats_parser, + &table_del_addr_parser, + &table_get_addr_parser, + &table_set_addr_parser, + &tstats_clr_parser, + &tstats_parser, +}; + +static void +_pfctl_verify_parsers(void) +{ + SNL_VERIFY_PARSERS(all_parsers); +}