diff options
author | Holger Eitzenberger <holger@eitzenberger.org> | 2013-10-28 09:42:33 -0400 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-10-29 08:05:54 -0400 |
commit | d954777324ffcba0b2f8119c102237426c654eeb (patch) | |
tree | 3b361575b15c6fc695d72b3057a5c1015028d10b | |
parent | fecda03493646b53f53892fa3c38c75ba9310374 (diff) |
netfilter: xt_NFQUEUE: fix --queue-bypass regression
V3 of the NFQUEUE target ignores the --queue-bypass flag,
causing packets to be dropped when the userspace listener
isn't running.
Regression is in since 8746ddcf12bb26 ("netfilter: xt_NFQUEUE:
introduce CPU fanout").
Reported-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | net/netfilter/xt_NFQUEUE.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/net/netfilter/xt_NFQUEUE.c b/net/netfilter/xt_NFQUEUE.c index 1e2fae32f81b..ed00fef58996 100644 --- a/net/netfilter/xt_NFQUEUE.c +++ b/net/netfilter/xt_NFQUEUE.c | |||
@@ -147,6 +147,7 @@ nfqueue_tg_v3(struct sk_buff *skb, const struct xt_action_param *par) | |||
147 | { | 147 | { |
148 | const struct xt_NFQ_info_v3 *info = par->targinfo; | 148 | const struct xt_NFQ_info_v3 *info = par->targinfo; |
149 | u32 queue = info->queuenum; | 149 | u32 queue = info->queuenum; |
150 | int ret; | ||
150 | 151 | ||
151 | if (info->queues_total > 1) { | 152 | if (info->queues_total > 1) { |
152 | if (info->flags & NFQ_FLAG_CPU_FANOUT) { | 153 | if (info->flags & NFQ_FLAG_CPU_FANOUT) { |
@@ -157,7 +158,11 @@ nfqueue_tg_v3(struct sk_buff *skb, const struct xt_action_param *par) | |||
157 | queue = nfqueue_hash(skb, par); | 158 | queue = nfqueue_hash(skb, par); |
158 | } | 159 | } |
159 | 160 | ||
160 | return NF_QUEUE_NR(queue); | 161 | ret = NF_QUEUE_NR(queue); |
162 | if (info->flags & NFQ_FLAG_BYPASS) | ||
163 | ret |= NF_VERDICT_FLAG_QUEUE_BYPASS; | ||
164 | |||
165 | return ret; | ||
161 | } | 166 | } |
162 | 167 | ||
163 | static struct xt_target nfqueue_tg_reg[] __read_mostly = { | 168 | static struct xt_target nfqueue_tg_reg[] __read_mostly = { |