bridge: Clear INET control block of SKBs passed into ip_fragment().
authorDavid S. Miller <davem@davemloft.net>
Thu, 2 Sep 2010 01:06:39 +0000 (18:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 2 Sep 2010 02:17:34 +0000 (19:17 -0700)
In a similar vain to commit 17762060c25590bfddd68cc1131f28ec720f405f
("bridge: Clear IPCB before possible entry into IP stack")

Any time we call into the IP stack we have to make sure the state
there is as expected by the ipv4 code.

With help from Eric Dumazet and Herbert Xu.

Reported-by: Bandan Das <bandan.das@stratus.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_netfilter.c

index 5ed00bd7009f55d1bdb5b8697889594442848e3f..137f23259a93947ce581a9d14c8f6048f3ca2c19 100644 (file)
@@ -761,9 +761,11 @@ static int br_nf_dev_queue_xmit(struct sk_buff *skb)
 {
        if (skb->nfct != NULL && skb->protocol == htons(ETH_P_IP) &&
            skb->len + nf_bridge_mtu_reduction(skb) > skb->dev->mtu &&
-           !skb_is_gso(skb))
+           !skb_is_gso(skb)) {
+               /* BUG: Should really parse the IP options here. */
+               memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
                return ip_fragment(skb, br_dev_queue_push_xmit);
-       else
+       else
                return br_dev_queue_push_xmit(skb);
 }
 #else