From: Vasily Averin <vvs@parallels.com>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Florian Westphal <fw@strlen.de>,
netfilter-devel@vger.kernel.org,
Stephen Hemminger <stephen@networkplumber.org>,
Patrick McHardy <kaber@trash.net>
Subject: [PATCH v2] bridge: superfluous skb->nfct check in br_nf_dev_queue_xmit
Date: Mon, 05 May 2014 00:17:48 +0400 [thread overview]
Message-ID: <5366A06C.7060509@parallels.com> (raw)
In-Reply-To: <20140504192517.GA13876@localhost>
[v2: #ifdef is changed from NF_CONNTRACK_IPV4 to NF_DEFRAG_IPV4]
Currently bridge can silently drop ipv4 fragments.
If node have loaded nf_defrag_ipv4 module but have no nf_conntrack_ipv4,
br_nf_pre_routing defragments incoming ipv4 fragments
but nfct check in br_nf_dev_queue_xmit does not allow re-fragment combined
packet back, and therefore it is dropped in br_dev_queue_push_xmit without
incrementing of any failcounters
It seems the only way to hit the ip_fragment code in the bridge xmit
path is to have a fragment list whose reassembled fragments go over
the mtu. This only happens if nf_defrag is enabled. Thanks to
Florian Westphal for providing feedback to clarify this.
Defragmentation ipv4 is required not only in conntracks but at least in
TPROXY target and socket match, therefore #ifdef is changed from
NF_CONNTRACK_IPV4 to NF_DEFRAG_IPV4
Signed-off-by: Vasily Averin <vvs@openvz.org>
---
net/bridge/br_netfilter.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
index 80e1b0f..2acf7fa 100644
--- a/net/bridge/br_netfilter.c
+++ b/net/bridge/br_netfilter.c
@@ -859,12 +859,12 @@ static unsigned int br_nf_forward_arp(const struct nf_hook_ops *ops,
return NF_STOLEN;
}
-#if IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4)
+#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV4)
static int br_nf_dev_queue_xmit(struct sk_buff *skb)
{
int ret;
- if (skb->nfct != NULL && skb->protocol == htons(ETH_P_IP) &&
+ if (skb->protocol == htons(ETH_P_IP) &&
skb->len + nf_bridge_mtu_reduction(skb) > skb->dev->mtu &&
!skb_is_gso(skb)) {
if (br_parse_ip_options(skb))
--
1.7.5.4
next prev parent reply other threads:[~2014-05-04 20:19 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <534FB7D2.3020705@parallels.com>
2014-04-20 5:33 ` [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit Vasily Averin
2014-04-24 16:32 ` Florian Westphal
2014-04-28 12:37 ` Vasily Averin
2014-04-28 13:16 ` Florian Westphal
2014-04-28 14:25 ` Vasily Averin
2014-04-28 14:32 ` Pablo Neira Ayuso
2014-04-30 9:06 ` Vasily Averin
2014-04-30 8:54 ` [PATCH] bridge: Superfluous " Vasily Averin
2014-04-30 9:39 ` Pablo Neira Ayuso
2014-04-30 10:02 ` Florian Westphal
2014-05-04 12:54 ` Pablo Neira Ayuso
2014-05-04 19:04 ` Vasily Averin
2014-05-04 19:25 ` Pablo Neira Ayuso
2014-05-04 20:17 ` Vasily Averin [this message]
2014-05-05 14:07 ` [PATCH v2] bridge: superfluous " Pablo Neira Ayuso
2014-04-29 14:10 ` [PATCH 1/1] " Patrick McHardy
2014-04-28 13:31 [PATCH v2] bridge: Superfluous " Vasily Averin
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=5366A06C.7060509@parallels.com \
--to=vvs@parallels.com \
--cc=fw@strlen.de \
--cc=kaber@trash.net \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=stephen@networkplumber.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).