From nobody Mon Aug 10 14:34:23 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 4hJchd37Rwz6nsDS for ; Mon, 10 Aug 2026 14:34: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 4hJchc10zVz3bQy for ; Mon, 10 Aug 2026 14:34:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786372464; 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=BcsslUz3wyqAGnt6OkGVuwnyB9NfqGZiEImn/TXbxyA=; b=wdLJOThwSLdIHXKqIbbkV5+3PzZndL4ipwFvOAdgLbgnTt8QalNo2RJSHYXAvsupSm07cf v4+jFYp6iaKyMbU3TCH/mB3/7sbCZcL8n2dgUdCzr6igLwUkjeFdtgvhQYtXyUNgXhaVQi ek4CwV0OUKTPzICEsEV6yfo8IWgGGotQ4/o1IyXJYFI2rLixyevL12wMXg7IXx6/X5h6IG ewNlPjMNdA6v7l8p8b8Ex0uSDdWyE6YgIKtKqT2jAoXQ3qNtEXkW1r3JJoZd8I6IFj6g1z sLCE7Q4FWKQsJsiXbZOby6zS6hQ2vC6/oaWLoGJlxjgwiqA2qzdso3be+AgtsA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786372464; a=rsa-sha256; cv=none; b=fJxTDHsSV23XTA7L+foz2C01jHHfZNnLDeZAYwnNlHLbH+eMXFnOa1pKOk+UVeQJ8mhk4a i9dkFVdjsDWWU7xxRsTGAVE1KadNk/Faq6Qckkdz4HOf/+swobOxDJNksxq77OycJcEp1D ae6FxR6oaakH8sUSVbScojBKLlXWYTmIJ51C2FAPb0kWIxaIyYP9kpr/kt4PZCVWLdDeDC 2JAd3nrlag4u2X32VWSeKuGWzLjsp0LrCMKaafUTUbvGvfJzucdCiQrT+R7EdHkInbVLv3 KXkYPC5HZ+PSMLY0UEdZP8ttllOgGtxAUh+aABNRSPfPJ6/ZglNQpdqYHglyNA== 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=1786372464; 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=BcsslUz3wyqAGnt6OkGVuwnyB9NfqGZiEImn/TXbxyA=; b=qJ6Vp6dlIsI7nIm9KcfreBoioUeDlG4ACxJ9kggzppW/IEyqUjGUovoa34BxhC7EKmYZHZ 97+WYiuZxUOsUdsiZ2VMy9FfOJDBQNtu+fwhwX/rPGgnccGwjNatcAxVxyuxunWXi7FCMU 5QGyOa/10vVYYudHkZn7dJwcnGI7MiOom/FJiC+nj0lupSpxE8euUmklR01Xh9j7MhRSYO UiobNKW09ho3oAv23vHBujoJCypBPwiAYqtazM1Uu41kovzfHIUkghrfnDoa4wg4m9o1RA ZEgfjaHj3OE57gmaGIApKKVYTesbC1PD8n9mFDWPxkncSQzD0jAZGaeRm2ohxg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hJchb5d0lz1BdN for ; Mon, 10 Aug 2026 14:34:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 247b1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 10 Aug 2026 14:34:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: 9b9b3b157a89 - main - libsysdecode: also verify command decoders 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 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: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9b9b3b157a89d159108bcd2f5a817392ab915587 Auto-Submitted: auto-generated Date: Mon, 10 Aug 2026 14:34:23 +0000 Message-Id: <6a79e16f.247b1.568c8b5a@gitrepo.freebsd.org> The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=9b9b3b157a89d159108bcd2f5a817392ab915587 commit 9b9b3b157a89d159108bcd2f5a817392ab915587 Author: Kristof Provost AuthorDate: 2026-08-10 09:22:08 +0000 Commit: Kristof Provost CommitDate: 2026-08-10 14:33:32 +0000 libsysdecode: also verify command decoders We already verified that the attribute parser tables were correctly sorted. Now also verify that the command decoders are too. While here move the assertions into a constructor so we only run them once. --- lib/libsysdecode/netlink.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/libsysdecode/netlink.c b/lib/libsysdecode/netlink.c index 22ccf1fc2acb..e2b49ea12d7c 100644 --- a/lib/libsysdecode/netlink.c +++ b/lib/libsysdecode/netlink.c @@ -61,6 +61,7 @@ static const struct nlattr_decoder_set _name = { \ static void nl_decode_attrs_raw(FILE *fp, const struct nlattr *nla_head, size_t len, const struct nlattr_decoder *ps, size_t pslen); +static void sysdecode_netlink_pf_constructor(void) __attribute__ ((__constructor__)); static void nlattr_decode_in6_addr(FILE *fp, const struct nlattr *attr, @@ -370,6 +371,18 @@ static const struct pfnl_cmd_decoder cmd_decoder[] = { { .cmd_num = PFNL_CMD_GET_ADDR, .ds = &addr_decoder }, }; +static inline void +pfnl_verify_cmd_decoders(const struct pfnl_cmd_decoder *cmds, size_t count) +{ + int num = cmds[0].cmd_num; + + for (size_t i = 1; i < count; i++) { + const struct pfnl_cmd_decoder *p = &cmds[i]; + assert(p->cmd_num > num); + num = p->cmd_num; + } +} + static void sysdecode_netlink_pf(FILE *fp, const struct genlmsghdr *genl, size_t nlm_len) { @@ -412,8 +425,6 @@ sysdecode_netlink(FILE *fp, const void *buf, size_t len, int protocol) return (false); if (family_table == NULL) { - NL_VERIFY_DECODERS(all_decoders); - family_table = malloc((num_family + 1) * sizeof(struct name_table)); family_table[num_family] = (struct name_table){0, NULL}; @@ -554,3 +565,10 @@ sysdecode_netlink(FILE *fp, const void *buf, size_t len, int protocol) fprintf(fp, "}"); return (true); } + +static void +sysdecode_netlink_pf_constructor(void) +{ + NL_VERIFY_DECODERS(all_decoders); + pfnl_verify_cmd_decoders(cmd_decoder, nitems(cmd_decoder)); +}