diff options
Diffstat (limited to 'net/bridge/br_forward.c')
| -rw-r--r-- | net/bridge/br_forward.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 8be9f2123e54..191b861e5e53 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c | |||
| @@ -35,16 +35,17 @@ static inline unsigned packet_length(const struct sk_buff *skb) | |||
| 35 | int br_dev_queue_push_xmit(struct sk_buff *skb) | 35 | int br_dev_queue_push_xmit(struct sk_buff *skb) |
| 36 | { | 36 | { |
| 37 | /* drop mtu oversized packets except gso */ | 37 | /* drop mtu oversized packets except gso */ |
| 38 | if (packet_length(skb) > skb->dev->mtu && !skb_shinfo(skb)->gso_size) | 38 | if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb)) |
| 39 | kfree_skb(skb); | 39 | kfree_skb(skb); |
| 40 | else { | 40 | else { |
| 41 | #ifdef CONFIG_BRIDGE_NETFILTER | ||
| 42 | /* ip_refrag calls ip_fragment, doesn't copy the MAC header. */ | 41 | /* ip_refrag calls ip_fragment, doesn't copy the MAC header. */ |
| 43 | nf_bridge_maybe_copy_header(skb); | 42 | if (nf_bridge_maybe_copy_header(skb)) |
| 44 | #endif | 43 | kfree_skb(skb); |
| 45 | skb_push(skb, ETH_HLEN); | 44 | else { |
| 45 | skb_push(skb, ETH_HLEN); | ||
| 46 | 46 | ||
| 47 | dev_queue_xmit(skb); | 47 | dev_queue_xmit(skb); |
| 48 | } | ||
| 48 | } | 49 | } |
| 49 | 50 | ||
| 50 | return 0; | 51 | return 0; |
