* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit [not found] <534FB7D2.3020705@parallels.com> @ 2014-04-20 5:33 ` Vasily Averin 2014-04-24 16:32 ` Florian Westphal 2014-04-29 14:10 ` [PATCH 1/1] " Patrick McHardy 0 siblings, 2 replies; 16+ messages in thread From: Vasily Averin @ 2014-04-20 5:33 UTC (permalink / raw) To: Vasily Averin, Patrick McHardy Cc: Stephen Hemminger, bridge, netfilter-devel, David S. Miller Please do not apply my patch, probably it breaks processing of VLAN packets. Dear Patrick, could you please explain why fragmentation of packets requires enabled connection tracking? During old patch discussion you told "everything related to fragmenting is only needed with NF_CONNTRACK". However before adding (skb->nfct) check bridge worked well with fragments, and I cannot understand what exactly in ip_fragment should not work with disabled connection trackng. >From my point of view its better to drop packets in ip_fragment(), where failcounters accounts these events instead silent dropping in br_dev_queu_push_xmit(). So could you please explain, why we need to have skb->nfct check in br_nf_dev_queue_xmit()? Thank you, Vasily Averin On 04/17/2014 03:15 PM, Vasily Averin wrote: > skb->nfct check in br_nf_dev_queue_xmit() does not work if conntracks > are not loaded on the node. This check does not allow to fragment skb > combined from incoming fragments, as results this skb will be dropped > silently in br_dev_queue_push_xmit() > > This check was added in commit c197facc8ea08062f8f949aade6a33649ee06771 > netfilter: bridge: allow fragmentation of VLAN packets traversing a bridge > > I believe this check is superfluous and should be removed. > > Signed-off-by: Vasily Averin <vvs@openvz.org> > --- > net/bridge/br_netfilter.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c > index 80e1b0f..6a8407c 100644 > --- a/net/bridge/br_netfilter.c > +++ b/net/bridge/br_netfilter.c > @@ -864,7 +864,7 @@ 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)) > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit 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-29 14:10 ` [PATCH 1/1] " Patrick McHardy 1 sibling, 1 reply; 16+ messages in thread From: Florian Westphal @ 2014-04-24 16:32 UTC (permalink / raw) To: Vasily Averin Cc: Patrick McHardy, bridge, Stephen Hemminger, Saikiran Madugula, David S. Miller, netfilter-devel Vasily Averin <vvs@parallels.com> wrote: > Please do not apply my patch, probably it breaks processing of VLAN packets. Why would it break VLAN? In fact, the same dicussion came up couple of days back and I think the nfct test is wrong. There is no guarantee that skb->nfct == NULL means that packet was not defragmented via nf_defrag (e.g. rror in l4 protocol tracker, nf_defrag_ipv4 loaded but no nf_conntrack_ipv4) For ipv6 its even worse since we toss all ipv6 defragmented packets... ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-04-24 16:32 ` Florian Westphal @ 2014-04-28 12:37 ` Vasily Averin 2014-04-28 13:16 ` Florian Westphal 0 siblings, 1 reply; 16+ messages in thread From: Vasily Averin @ 2014-04-28 12:37 UTC (permalink / raw) To: Florian Westphal Cc: bridge, Patrick McHardy, Stephen Hemminger, netfilter-devel, David S. Miller On 04/24/2014 08:32 PM, Florian Westphal wrote: > Vasily Averin <vvs@parallels.com> wrote: >> Please do not apply my patch, probably it breaks processing of VLAN packets. > > Why would it break VLAN? Sorry, seems it was false alert. We got report about problem on RHEL6-based OpenVZ kernel: large UDP and ICMP packets was dropped on bridge without incrementing of any failcounters. Connection tracking was disabled on this node , nf_conntrack module was unloaded Ftrace pointed that it was happen because nfct check. I've unloaded nf_conntrack module and problem was reproduced again After removing nfct check problem went away. The check was added by patch that fixed processing of VLAN packets. I did not tested this scenario and therefore asked to delay processing of my patch, to investigate this case more carefully. IS_VLAN_IP() check on RHEL6 kernels seems is not depend on nfct check, in current mainline we do not have this code at all, therefore removing of nfct check should not affect this case too. Therefore I believe that my patch is still correct, however now I think we also need to remove #if IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4) in br_nf_dev_queue_xmit(). > In fact, the same dicussion came up couple of days back and I think the > nfct test is wrong. There is no guarantee that skb->nfct == NULL means > that packet was not defragmented via nf_defrag (e.g. rror in l4 protocol > tracker, nf_defrag_ipv4 loaded but no nf_conntrack_ipv4) Thank you for explanation, In my case ftrace also shows that packets was defragmented in ipv4_conntrack_defrag(). However this module does not depend on NF_CONNTRACK_IPV4. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-04-28 12:37 ` Vasily Averin @ 2014-04-28 13:16 ` Florian Westphal 2014-04-28 14:25 ` Vasily Averin 2014-04-30 8:54 ` [PATCH] bridge: Superfluous " Vasily Averin 0 siblings, 2 replies; 16+ messages in thread From: Florian Westphal @ 2014-04-28 13:16 UTC (permalink / raw) To: Vasily Averin Cc: Florian Westphal, Patrick McHardy, bridge, Stephen Hemminger, Saikiran Madugula, David S. Miller, netfilter-devel Vasily Averin <vvs@parallels.com> wrote: > We got report about problem on RHEL6-based OpenVZ kernel: > large UDP and ICMP packets was dropped on bridge without incrementing of any failcounters. > Connection tracking was disabled on this node , nf_conntrack module was unloaded > Ftrace pointed that it was happen because nfct check. Right. If you unload the conntrack module this bug triggers since nf_defrag_ipv4 will still defragment ipv4 packets (and thus needs refragmentation). > Therefore I believe that my patch is still correct, however now I think we also need > to remove #if IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4) in br_nf_dev_queue_xmit(). I don't think so, DEFRAG_IPV4 is dependency glue, so it shouldn't be possible to build kernel with CONNTRACK_IPV4=n and DEFRAG_IPV4=(m|y). Could you please formally submit your patch for inclusion in nf.git? For some reason I don't see your patch in http://patchwork.ozlabs.org/project/netfilter-devel/list/ Thanks! ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit 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 1 sibling, 2 replies; 16+ messages in thread From: Vasily Averin @ 2014-04-28 14:25 UTC (permalink / raw) To: Florian Westphal Cc: bridge, Patrick McHardy, Stephen Hemminger, netfilter-devel, David S. Miller >> Therefore I believe that my patch is still correct, however now I think we also need >> to remove #if IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4) in br_nf_dev_queue_xmit(). > > I don't think so, DEFRAG_IPV4 is dependency glue, so it shouldn't be > possible to build kernel with CONNTRACK_IPV4=n and DEFRAG_IPV4=(m|y). Could you please explain, why this #ifdef is required? I'm going to remove this #ifdef because it was added together with nfct check. Also I believe you are wrong with dependencies: NF_CONNTRACK_IPV4 forces NF_DEFRAG_IPV4, not vice versa net/ipv4/netfilter/Kconfig config NF_DEFRAG_IPV4 tristate default n config NF_CONNTRACK_IPV4 tristate "IPv4 connection tracking support (required for NAT)" depends on NF_CONNTRACK default m if NETFILTER_ADVANCED=n select NF_DEFRAG_IPV4 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-04-28 14:25 ` Vasily Averin @ 2014-04-28 14:32 ` Pablo Neira Ayuso 2014-04-30 9:06 ` Vasily Averin 1 sibling, 0 replies; 16+ messages in thread From: Pablo Neira Ayuso @ 2014-04-28 14:32 UTC (permalink / raw) To: Vasily Averin Cc: bridge, Florian Westphal, Patrick McHardy, Stephen Hemminger, netfilter-devel, David S. Miller On Mon, Apr 28, 2014 at 06:25:22PM +0400, Vasily Averin wrote: > >> Therefore I believe that my patch is still correct, however now I think we also need > >> to remove #if IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4) in br_nf_dev_queue_xmit(). > > > > I don't think so, DEFRAG_IPV4 is dependency glue, so it shouldn't be > > possible to build kernel with CONNTRACK_IPV4=n and DEFRAG_IPV4=(m|y). > > Could you please explain, why this #ifdef is required? > > I'm going to remove this #ifdef because it was added together with nfct check. > > Also I believe you are wrong with dependencies: > NF_CONNTRACK_IPV4 forces NF_DEFRAG_IPV4, not vice versa That's fine. Basically nf_conntrack *always* requires defragmentation. But defragmentation is also required by tproxy, which doesn't force you to have nf_conntrack. > net/ipv4/netfilter/Kconfig > config NF_DEFRAG_IPV4 > tristate > default n > > config NF_CONNTRACK_IPV4 > tristate "IPv4 connection tracking support (required for NAT)" > depends on NF_CONNTRACK > default m if NETFILTER_ADVANCED=n > select NF_DEFRAG_IPV4 > > > -- > To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-04-28 14:25 ` Vasily Averin 2014-04-28 14:32 ` Pablo Neira Ayuso @ 2014-04-30 9:06 ` Vasily Averin 1 sibling, 0 replies; 16+ messages in thread From: Vasily Averin @ 2014-04-30 9:06 UTC (permalink / raw) To: Florian Westphal Cc: bridge, David S. Miller, Stephen Hemminger, netfilter-devel, Patrick McHardy, Pablo Neira Ayuso On 04/28/2014 06:25 PM, Vasily Averin wrote: >>> Therefore I believe that my patch is still correct, however now I think we also need >>> to remove #if IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4) in br_nf_dev_queue_xmit(). >> >> I don't think so, DEFRAG_IPV4 is dependency glue, so it shouldn't be >> possible to build kernel with CONNTRACK_IPV4=n and DEFRAG_IPV4=(m|y). > > Also I believe you are wrong with dependencies: > NF_CONNTRACK_IPV4 forces NF_DEFRAG_IPV4, not vice versa If you do not want to remove this #ifdef at all how do you like an idea to replace NF_CONNTRACK_IPV4 to NF_DEFRAG_IPV4? ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH] bridge: Superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-04-28 13:16 ` Florian Westphal 2014-04-28 14:25 ` Vasily Averin @ 2014-04-30 8:54 ` Vasily Averin 2014-04-30 9:39 ` Pablo Neira Ayuso 2014-05-04 12:54 ` Pablo Neira Ayuso 1 sibling, 2 replies; 16+ messages in thread From: Vasily Averin @ 2014-04-30 8:54 UTC (permalink / raw) To: Florian Westphal Cc: netfilter-devel, Stephen Hemminger, Patrick McHardy, Saikiran Madugula, Pablo Neira Ayuso 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 Signed-off-by: Vasily Averin <vvs@openvz.org> --- net/bridge/br_netfilter.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index 80e1b0f..6a8407c 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c @@ -864,7 +864,7 @@ 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 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH] bridge: Superfluous skb->nfct check in br_nf_dev_queue_xmit 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 1 sibling, 1 reply; 16+ messages in thread From: Pablo Neira Ayuso @ 2014-04-30 9:39 UTC (permalink / raw) To: Vasily Averin Cc: Florian Westphal, netfilter-devel, Stephen Hemminger, Patrick McHardy, Saikiran Madugula On Wed, Apr 30, 2014 at 12:54:50PM +0400, Vasily Averin wrote: > 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 Patrick already mentioned that bridges should not defragment unless conntrack is enabled. Please, see: http://marc.info/?l=netfilter-devel&m=139878065822267&w=2 I think we have to consider some alternative way to fix what you report. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] bridge: Superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-04-30 9:39 ` Pablo Neira Ayuso @ 2014-04-30 10:02 ` Florian Westphal 0 siblings, 0 replies; 16+ messages in thread From: Florian Westphal @ 2014-04-30 10:02 UTC (permalink / raw) To: Pablo Neira Ayuso Cc: Vasily Averin, Florian Westphal, netfilter-devel, Stephen Hemminger, Patrick McHardy, Saikiran Madugula Pablo Neira Ayuso <pablo@netfilter.org> wrote: > On Wed, Apr 30, 2014 at 12:54:50PM +0400, Vasily Averin wrote: > > 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 > > Patrick already mentioned that bridges should not defragment unless > conntrack is enabled. > > Please, see: http://marc.info/?l=netfilter-devel&m=139878065822267&w=2 > > I think we have to consider some alternative way to fix what you > report. Could you explain how br_nf_dev_queue_xmit could encouter an IP packet that doesn't fit link MTU without netfilter defrag? Because I do not see any way of this happening, all bridge ports must have the same MTU? ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] bridge: Superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-04-30 8:54 ` [PATCH] bridge: Superfluous " Vasily Averin 2014-04-30 9:39 ` Pablo Neira Ayuso @ 2014-05-04 12:54 ` Pablo Neira Ayuso 2014-05-04 19:04 ` Vasily Averin 1 sibling, 1 reply; 16+ messages in thread From: Pablo Neira Ayuso @ 2014-05-04 12:54 UTC (permalink / raw) To: Vasily Averin Cc: Florian Westphal, netfilter-devel, Stephen Hemminger, Patrick McHardy, Saikiran Madugula On Wed, Apr 30, 2014 at 12:54:50PM +0400, Vasily Averin wrote: > 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 If no further objections, I'll push this original patch appending this comment to the description: [ 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. ] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] bridge: Superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-05-04 12:54 ` Pablo Neira Ayuso @ 2014-05-04 19:04 ` Vasily Averin 2014-05-04 19:25 ` Pablo Neira Ayuso 0 siblings, 1 reply; 16+ messages in thread From: Vasily Averin @ 2014-05-04 19:04 UTC (permalink / raw) To: Pablo Neira Ayuso Cc: Florian Westphal, netfilter-devel, Stephen Hemminger, Patrick McHardy, Saikiran Madugula On 05/04/2014 04:54 PM, Pablo Neira Ayuso wrote: > On Wed, Apr 30, 2014 at 12:54:50PM +0400, Vasily Averin wrote: >> 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 > > If no further objections, I'll push this original patch appending this comment > to the description: > > [ 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. ] I have not objections, however I still do not understand why #if IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4) is required in br_dev_queue_push_xmit()? If ipv4 defragmentation is required not only for conntracks but for TPROXY target and xt_socket match I think we need to use NF_DEFRAG_IPV4 instead. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH] bridge: Superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-05-04 19:04 ` Vasily Averin @ 2014-05-04 19:25 ` Pablo Neira Ayuso 2014-05-04 20:17 ` [PATCH v2] bridge: superfluous " Vasily Averin 0 siblings, 1 reply; 16+ messages in thread From: Pablo Neira Ayuso @ 2014-05-04 19:25 UTC (permalink / raw) To: Vasily Averin Cc: Florian Westphal, netfilter-devel, Stephen Hemminger, Patrick McHardy, Saikiran Madugula On Sun, May 04, 2014 at 11:04:29PM +0400, Vasily Averin wrote: > On 05/04/2014 04:54 PM, Pablo Neira Ayuso wrote: > > On Wed, Apr 30, 2014 at 12:54:50PM +0400, Vasily Averin wrote: > >> 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 > > > > If no further objections, I'll push this original patch appending this comment > > to the description: > > > > [ 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. ] > > I have not objections, however I still do not understand why #if > IS_ENABLED(CONFIG_NF_CONNTRACK_IPV4) is required in > br_dev_queue_push_xmit()? > > If ipv4 defragmentation is required not only for conntracks but for > TPROXY target and xt_socket match I think we need to use > NF_DEFRAG_IPV4 instead. Before your patch, this was checking for skb->nfct which is defined by #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) in include/linux/skbuff.h. But after removing that skb->nfct check, we can safely change it to CONFIG_NF_DEFRAG_IPV4. You can send me a new patch version including this change. ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2] bridge: superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-05-04 19:25 ` Pablo Neira Ayuso @ 2014-05-04 20:17 ` Vasily Averin 2014-05-05 14:07 ` Pablo Neira Ayuso 0 siblings, 1 reply; 16+ messages in thread From: Vasily Averin @ 2014-05-04 20:17 UTC (permalink / raw) To: Pablo Neira Ayuso Cc: Florian Westphal, netfilter-devel, Stephen Hemminger, Patrick McHardy [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 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2] bridge: superfluous skb->nfct check in br_nf_dev_queue_xmit 2014-05-04 20:17 ` [PATCH v2] bridge: superfluous " Vasily Averin @ 2014-05-05 14:07 ` Pablo Neira Ayuso 0 siblings, 0 replies; 16+ messages in thread From: Pablo Neira Ayuso @ 2014-05-05 14:07 UTC (permalink / raw) To: Vasily Averin Cc: Florian Westphal, netfilter-devel, Stephen Hemminger, Patrick McHardy On Mon, May 05, 2014 at 12:17:48AM +0400, Vasily Averin wrote: > [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 Applied, thanks Vasily. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/1] superfluous skb->nfct check in br_nf_dev_queue_xmit 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-29 14:10 ` Patrick McHardy 1 sibling, 0 replies; 16+ messages in thread From: Patrick McHardy @ 2014-04-29 14:10 UTC (permalink / raw) To: Vasily Averin Cc: bridge, Stephen Hemminger, Saikiran Madugula, David S. Miller, netfilter-devel On Sun, Apr 20, 2014 at 09:33:41AM +0400, Vasily Averin wrote: > Please do not apply my patch, probably it breaks processing of VLAN packets. > > Dear Patrick, > could you please explain why fragmentation of packets requires enabled > connection tracking? It doesn't require connection tracking, but connection tracking is the only reason why we should fragment here since connection tracking does defragmentation. > During old patch discussion you told "everything related to fragmenting > is only needed with NF_CONNTRACK". However before adding (skb->nfct) check > bridge worked well with fragments, and I cannot understand what exactly in > ip_fragment should not work with disabled connection trackng. A bridge should not fragment packets. This is only done to counter the effects of connection tracking, hence we only do it if connection tracking is enabled. > > >From my point of view its better to drop packets in ip_fragment(), > where failcounters accounts these events instead silent dropping > in br_dev_queu_push_xmit(). > > So could you please explain, why we need to have skb->nfct check > in br_nf_dev_queue_xmit()? > > Thank you, > Vasily Averin > > On 04/17/2014 03:15 PM, Vasily Averin wrote: > > skb->nfct check in br_nf_dev_queue_xmit() does not work if conntracks > > are not loaded on the node. This check does not allow to fragment skb > > combined from incoming fragments, as results this skb will be dropped > > silently in br_dev_queue_push_xmit() > > > > This check was added in commit c197facc8ea08062f8f949aade6a33649ee06771 > > netfilter: bridge: allow fragmentation of VLAN packets traversing a bridge > > > > I believe this check is superfluous and should be removed. > > > > Signed-off-by: Vasily Averin <vvs@openvz.org> > > --- > > net/bridge/br_netfilter.c | 2 +- > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c > > index 80e1b0f..6a8407c 100644 > > --- a/net/bridge/br_netfilter.c > > +++ b/net/bridge/br_netfilter.c > > @@ -864,7 +864,7 @@ 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)) > > ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2014-05-05 14:08 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [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 ` [PATCH v2] bridge: superfluous " Vasily Averin 2014-05-05 14:07 ` Pablo Neira Ayuso 2014-04-29 14:10 ` [PATCH 1/1] " Patrick McHardy
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).