| From 3bcae642028b1e041d8ece56a681efceacf9065f Mon Sep 17 00:00:00 2001 |
| From: David S. Miller <davem@davemloft.net> |
| Date: Sun, 19 Sep 2010 21:45:29 -0700 |
| Subject: bridge: Clear INET control block of SKBs passed into ip_fragment(). |
| |
| |
| From: David S. Miller <davem@davemloft.net> |
| |
| [ Upstream commit 4ce6b9e1621c187a32a47a17bf6be93b1dc4a3df ] |
| |
| 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: Brandan Das <brandan.das@stratus.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| net/bridge/br_netfilter.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/net/bridge/br_netfilter.c |
| +++ b/net/bridge/br_netfilter.c |
| @@ -800,9 +800,11 @@ static int br_nf_dev_queue_xmit(struct s |
| if (skb->nfct != NULL && |
| (skb->protocol == htons(ETH_P_IP) || IS_VLAN_IP(skb)) && |
| skb->len > 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 |