netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Florian Westphal <fw@strlen.de>
To: <netfilter-devel@vger.kernel.org>
Cc: Florian Westphal <fw@strlen.de>
Subject: [PATCH nftables 7/8] src: netlink: remove assertion
Date: Fri, 16 Aug 2019 16:42:40 +0200	[thread overview]
Message-ID: <20190816144241.11469-8-fw@strlen.de> (raw)
In-Reply-To: <20190816144241.11469-1-fw@strlen.de>

This assert can trigger as follows:

set s {
	type integer,8
	elemets = { 1 }
};
vlan id @s accept

reason is that 'vlan id' will store a 16 bit value into the dreg,
so set should use 'integer,16'.

The kernel won't detect this, as the lookup expression will only
verify that it can load one byte from the given register.

This removes the assertion, in case we hit this condition we can just
return without doing any further actions.

Signed-off-by: Florian Westphal <fw@strlen.de>
---
 src/netlink_delinearize.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c
index fc2574b1dea9..11c2e2d87c54 100644
--- a/src/netlink_delinearize.c
+++ b/src/netlink_delinearize.c
@@ -1796,9 +1796,20 @@ static void binop_adjust_one(const struct expr *binop, struct expr *value,
 {
 	struct expr *left = binop->left;
 
-	assert(value->len >= binop->right->len);
-
 	mpz_rshift_ui(value->value, shift);
+
+	/* This will happen when a set has a key that is
+	 * smaller than the amount of bytes loaded by the
+	 * payload/exthdr expression.
+	 *
+	 * This can't happen with normal nft frontend,
+	 * but it can happen with custom clients or with
+	 * nft sets defined via 'type integer,8' and then
+	 * asking "vlan id @myset".
+	 */
+	if (value->len < binop->right->len)
+		return;
+
 	switch (left->etype) {
 	case EXPR_PAYLOAD:
 	case EXPR_EXTHDR:
-- 
2.21.0


  parent reply	other threads:[~2019-08-16 14:45 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-16 14:42 [PATCH nftables 0/8] add typeof keyword Florian Westphal
2019-08-16 14:42 ` [PATCH nftables 1/8] src: libnftnl: run single-initcalls only once Florian Westphal
2019-08-16 14:42 ` [PATCH nftables 2/8] src: libnftnl: split nft_ctx_new/free Florian Westphal
2019-08-16 14:42 ` [PATCH nftables 3/8] src: store expr, not dtype to track data in sets Florian Westphal
2019-08-16 14:42 ` [PATCH nftables 4/8] src: parser: add syntax to provide bitsize for non-spcific types Florian Westphal
2019-08-16 14:42 ` [PATCH nftables 5/8] src: add "typeof" keyword Florian Westphal
2019-08-16 14:42 ` [PATCH nftables 6/8] src: add "typeof" print support Florian Westphal
2019-08-16 14:42 ` Florian Westphal [this message]
2019-08-16 14:42 ` [PATCH nftables 8/8] tests: add typeof test cases Florian Westphal
2019-08-17 10:23 ` [PATCH nftables 0/8] add typeof keyword Pablo Neira Ayuso
2019-08-17 10:33   ` Pablo Neira Ayuso
2019-08-17 19:26     ` Florian Westphal
2019-08-17 20:55   ` Florian Westphal
2019-08-18 14:33     ` Arturo Borrero Gonzalez
2019-08-26  9:49       ` Pablo Neira Ayuso

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190816144241.11469-8-fw@strlen.de \
    --to=fw@strlen.de \
    --cc=netfilter-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).