[Devel] [PATCH RHEL7 COMMIT] ms/bridge: superfluous skb->nfct check in br_nf_dev_queue_xmit

Konstantin Khorenko khorenko at virtuozzo.com
Wed Jun 10 08:09:09 PDT 2015


The commit is pushed to "branch-rh7-3.10.0-123.1.2-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-123.1.2.vz7.5.12
------>
commit 30783dd54918702cd893d1faf28a210c6558502b
Author: Kirill Tkhai <ktkhai at odin.com>
Date:   Wed Jun 10 19:09:09 2015 +0400

    ms/bridge: superfluous skb->nfct check in br_nf_dev_queue_xmit
    
    Porting patch diff-ms-bridge-drops-fragmented-packet-if-conntracks-are-disabled
    from 2.6.32 (commit aff09ce303f83bd370772349238482ae422a2341 in mainstream):
    
    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 at openvz.org>
    Signed-off-by: Pablo Neira Ayuso <pablo at netfilter.org>
    Signed-off-by: Kirill Tkhai <ktkhai at odin.com>
---
 net/bridge/br_netfilter.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
index 0afdf3e..4dc65f9 100644
--- a/net/bridge/br_netfilter.c
+++ b/net/bridge/br_netfilter.c
@@ -870,7 +870,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->dev->features & NETIF_F_VENET) &&
 	    skb->len + nf_bridge_mtu_reduction(skb) > skb->dev->mtu &&
 	    !skb_is_gso(skb)) {



More information about the Devel mailing list