netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pablo Neira Ayuso <pablo@netfilter.org>
To: "Carlos Falgueras García" <carlosfg@riseup.net>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: [PATCH libnftnl] expr: imm: Fix immediate verdict comparison
Date: Thu, 25 Aug 2016 17:19:30 +0200	[thread overview]
Message-ID: <20160825151930.GA3482@salvia> (raw)
In-Reply-To: <20160825145658.29391-1-carlosfg@riseup.net>

[-- Attachment #1: Type: text/plain, Size: 1475 bytes --]

On Thu, Aug 25, 2016 at 04:56:58PM +0200, Carlos Falgueras García wrote:
> An immediate expression of type 'DATA_VERDICT' can have set a chain (jump
> or goto), in this cases we must compare its 'union nftnl_data_reg' using
> 'DATA_CHAIN' flag instead of 'DATA_VERDICT'
> 
> Before this patch compare expressions "jump -> chain_a" and
> "jump -> chain_b" returns they are equals.
> 
> Signed-off-by: Carlos Falgueras García <carlosfg@riseup.net>
> ---
>  src/expr/immediate.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/src/expr/immediate.c b/src/expr/immediate.c
> index cb8a81b..b26fc8d 100644
> --- a/src/expr/immediate.c
> +++ b/src/expr/immediate.c
> @@ -329,10 +329,16 @@ static bool nftnl_expr_immediate_cmp(const struct nftnl_expr *e1,
>  
>  	if (e1->flags & (1 << NFTNL_EXPR_IMM_DREG))
>  		eq &= (i1->dreg == i2->dreg);
> -	if (e1->flags & (1 << NFTNL_EXPR_IMM_VERDICT))
> -		eq &= nftnl_data_reg_cmp(&i1->data, &i2->data, DATA_VERDICT);
> -	else if (e1->flags & (1 << NFTNL_EXPR_IMM_DATA))
> +	if (e1->flags & (1 << NFTNL_EXPR_IMM_VERDICT)) {
> +		if (e1->flags & (1 << NFTNL_EXPR_IMM_CHAIN))
> +			eq &= nftnl_data_reg_cmp(&i1->data, &i2->data,
> +						 DATA_CHAIN);
> +		else
> +			eq &= nftnl_data_reg_cmp(&i1->data, &i2->data,
> +						 DATA_VERDICT);

Probably better with this patch below? You don't need to split the
lines.

No need to resend, just review and confirm this change is OK and I'll
apply this here.

[-- Attachment #2: y.patch --]
[-- Type: text/x-diff, Size: 1827 bytes --]

>From 521b6b1a7cc99445cf983403add23f373836d1a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carlos=20Falgueras=20Garc=C3=ADa?= <carlosfg@riseup.net>
Date: Thu, 25 Aug 2016 16:56:58 +0200
Subject: [PATCH] expr: imm: Fix immediate verdict comparison
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

An immediate expression of type 'DATA_VERDICT' can have set a chain (jump
or goto), in this cases we must compare its 'union nftnl_data_reg' using
'DATA_CHAIN' flag instead of 'DATA_VERDICT'

Before this patch compare expressions "jump -> chain_a" and
"jump -> chain_b" returns they are equals.

Signed-off-by: Carlos Falgueras García <carlosfg@riseup.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
 src/expr/immediate.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/expr/immediate.c b/src/expr/immediate.c
index cb8a81b..8636738 100644
--- a/src/expr/immediate.c
+++ b/src/expr/immediate.c
@@ -326,13 +326,20 @@ static bool nftnl_expr_immediate_cmp(const struct nftnl_expr *e1,
 	struct nftnl_expr_immediate *i1 = nftnl_expr_data(e1);
 	struct nftnl_expr_immediate *i2 = nftnl_expr_data(e2);
 	bool eq = true;
+	int type;
 
 	if (e1->flags & (1 << NFTNL_EXPR_IMM_DREG))
 		eq &= (i1->dreg == i2->dreg);
-	if (e1->flags & (1 << NFTNL_EXPR_IMM_VERDICT))
-		eq &= nftnl_data_reg_cmp(&i1->data, &i2->data, DATA_VERDICT);
-	else if (e1->flags & (1 << NFTNL_EXPR_IMM_DATA))
+	if (e1->flags & (1 << NFTNL_EXPR_IMM_VERDICT)) {
+		if (e1->flags & (1 << NFTNL_EXPR_IMM_CHAIN))
+			type = DATA_CHAIN;
+		else
+			type = DATA_VERDICT;
+
+		eq &= nftnl_data_reg_cmp(&i1->data, &i2->data, type);
+	} else if (e1->flags & (1 << NFTNL_EXPR_IMM_DATA)) {
 		eq &= nftnl_data_reg_cmp(&i1->data, &i2->data, DATA_VALUE);
+	}
 
 	return eq;
 }
-- 
2.1.4


  reply	other threads:[~2016-08-25 15:26 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-25 14:56 [PATCH libnftnl] expr: imm: Fix immediate verdict comparison Carlos Falgueras García
2016-08-25 15:19 ` Pablo Neira Ayuso [this message]
2016-08-25 15:27   ` Carlos Falgueras García
2016-08-26 13:49   ` Carlos Falgueras García
2016-08-26 17:26     ` 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=20160825151930.GA3482@salvia \
    --to=pablo@netfilter.org \
    --cc=carlosfg@riseup.net \
    --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).