2019-05-08 20:09:23

by Jagdish Motwani

[permalink] [raw]
Subject: [PATCH net] netfilter: nf_queue:fix reinject verdict handling

From: Jagdish Motwani <[email protected]>

In case of more than 1 nf_queues, hooks between them are being executed
more than once.

Signed-off-by: Jagdish Motwani <[email protected]>
---
net/netfilter/nf_queue.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
index 9dc1d6e..b5b2be5 100644
--- a/net/netfilter/nf_queue.c
+++ b/net/netfilter/nf_queue.c
@@ -255,6 +255,7 @@ static unsigned int nf_iterate(struct sk_buff *skb,
repeat:
verdict = nf_hook_entry_hookfn(hook, skb, state);
if (verdict != NF_ACCEPT) {
+ *index = i;
if (verdict != NF_REPEAT)
return verdict;
goto repeat;
--
2.9.5


2019-05-13 09:24:41

by Pablo Neira Ayuso

[permalink] [raw]
Subject: Re: [PATCH net] netfilter: nf_queue:fix reinject verdict handling

Hi Jagdish,

On Thu, May 09, 2019 at 12:01:14AM +0530, Jagdish Motwani wrote:
> From: Jagdish Motwani <[email protected]>
>
> In case of more than 1 nf_queues, hooks between them are being executed
> more than once.

This refers to NF_REPEAT, correct?

I think this broke with 960632ece6949. If so, it would be good to add
the following tag to this patch then. It's useful for robots
collecting fixes for -stable kernels.

Fixes: 960632ece694 ("netfilter: convert hook list to an array")

> Signed-off-by: Jagdish Motwani <[email protected]>

Thanks.

2019-05-13 11:25:26

by Pablo Neira Ayuso

[permalink] [raw]
Subject: Re: [PATCH net] netfilter: nf_queue:fix reinject verdict handling

On Mon, May 13, 2019 at 10:36:51AM +0000, Jagdish Motwani wrote:
> Hi Pablo,
>
> The case I am referring to is : If there are more than 1 hooks
> returning NF_QUEUE verdict. When the first queue reinjects the
> packet, 'nf_reinject' starts traversing hooks with hook_index (i).
> However if it again receives a NF_QUEUE verdict (by some other
> netfilter hook), it queue with the wrong hook_index. So, when the
> second queue reinjects the packet, it re-executes some hooks in
> between the first 2 hooks.

Please, include this description in the patch. And thanks for
explaining.

> Thanks, I will mark : Fixes: 960632ece694 ("netfilter: convert hook list to an array") and update the description also.

Thanks, will wait for v2.

2019-05-13 12:17:32

by Jagdish Motwani

[permalink] [raw]
Subject: RE: [PATCH net] netfilter: nf_queue:fix reinject verdict handling

Hi Pablo,

The case I am referring to is : If there are more than 1 hooks returning NF_QUEUE verdict.
When the first queue reinjects the packet, 'nf_reinject' starts traversing hooks with hook_index (i).
However if it again receives a NF_QUEUE verdict (by some other netfilter hook), it queue with the wrong hook_index.
So, when the second queue reinjects the packet, it re-executes some hooks in between the first 2 hooks.

Thanks, I will mark : Fixes: 960632ece694 ("netfilter: convert hook list to an array") and update the description also.

Regards,
Jagdish
-----Original Message-----
From: Pablo Neira Ayuso <[email protected]>
Sent: Monday, May 13, 2019 2:52 PM
To: Jagdish Motwani <[email protected]>
Cc: [email protected]; Jagdish Motwani <[email protected]>; Jozsef Kadlecsik <[email protected]>; Florian Westphal <[email protected]>; David S. Miller <[email protected]>; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH net] netfilter: nf_queue:fix reinject verdict handling

Hi Jagdish,


On Thu, May 09, 2019 at 12:01:14AM +0530, Jagdish Motwani wrote:
> From: Jagdish Motwani <[email protected]>
>
> In case of more than 1 nf_queues, hooks between them are being
> executed more than once.

This refers to NF_REPEAT, correct?

I think this broke with 960632ece6949. If so, it would be good to add the following tag to this patch then. It's useful for robots collecting fixes for -stable kernels.

Fixes: 960632ece694 ("netfilter: convert hook list to an array")

> Signed-off-by: Jagdish Motwani <[email protected]>

Thanks.

________________________________

Sophos Technologies Private Limited Regd. Office: Sophos House, Saigulshan Complex, Beside White House, Panchvati Cross Road, Ahmedabad - 380006, Gujarat, India CIN: U72200GJ2006PTC047857

Sophos Ltd, a company registered in England and Wales number 2096520, The Pentagon, Abingdon Science Park, Abingdon, OX14 3YP, United Kingdom.